Spring Bean
Bean的作用域
概念
- 通过@Controller,@Service,@Repository,@Component,@Configuration,@Bean来声明Bean对象
- 通过ApplicationContext或者BeanFactory来获取对象
- 通过@Autowired,Setter方法或者构造方法等来为应用程序注入所依赖的Bean对象
Bean的作用域指的是Bean在Spring框架中的某种行为模式
Singleton(单例作用域)
每个Spring IoC容器内同名称的Bean只有一个实例(默认),所有依赖注入共享同一对象
Prototype(原型作用域)
每次使用该Bean时都会创建新的实例,生命周期由调用方管理
Request(请求作用域)
每个HTTP请求生命周期内创建一个新实例,请求结束后销毁
Session(会话作用域)
每个HTTP Session生命周期内创建一个新实例,会话失效时销毁
Application(应用作用域)
每个ServletContext生命周期内创建新的实例
WebSocket
每个WebSocket生命周期内创建新的实例,连接关闭时销毁
Bean的生命周期
生命周期指的是一个对象从诞生到销毁的整个生命过程,把这个过程就叫做一个对象的生命周期,Bean的生命周期分为以下五个部分:
- 实例化(为Bean分配内存空间)
- 属性赋值(Bean注入和装配,比如@Autowired)
- 初始化(执行各种通知和执行初始化方法)
- 使用Bean
- 销毁Bean
@PostConstruct 和 @PreDestroy 详解
@PostConstruct注解是在初始化阶段,在依赖注入完成后执行,用于初始化非依赖属性
@PreDestroy注解是在销毁阶段,在Bean被销毁前执行,用于 安全释放资源
Spring加载Bean
SpringBoot的自动配置原理源码口是@SpringBootApplication注解,这个注解封装了三个注解
- @SpringBootConfiguration标志当前类为配置类
- @ComponentScan进行包扫描(默认扫描的是启动类所在的当前包及其子包)
- @EnableAutoConfiguration
- @Import注解:读取当前项目下所有依赖jar包中两个文件里面定义的配置类(配置类中定义了@Bean注解标识的方法
- @AutoConfigurationPackage:把启动类所在的包下面的所有组件都注入到Spring容器中