Spring Bean的生命周期
Spring的生命周期从总体上可以分为创建和销毁两个部分.
- 实例化Bean对象
- 设置Bean属性
- 若是通过各种Aware接口声明了依赖关系,则会注入 Bean 对容器基础设施层面的依赖
- 如果bean实现了BeanNameAware接口, 则将BeanId通过setBeanName注入Spring中.
- 如果bean实现了BeanFactoryAware接口, 则将BeanFactory容器实例通过setBeanFactory注入Spring中
- 如果bean实现了ApplicationContextAware接口, 则将bean所在的应用的上下文通过setApplicationContext注入Spring中
- 如果bean实现了BeanPostProcessor接口, 则调用前置初始化方法, postProcessorBeforeInitialization()
- 如果bean实现了InitializingBean接口, 则调用afterPropertiesSet()方法,
- 调用自身的初始化方法
- 如果bean实现了BeanPostProcessor接口, 则调用后置初始化方法, postProcessorAfterInitialization()
- bean已经准备就绪, 可以使用, 一直驻留在应用上下文中, 直到应用上下文被销毁
- 如果bean实现了DisposableBean接口, 则调用destroy()方法
- 调用自身的destroy方法
Spring Bean 的作用域
Spring Bean 有五个作用域,其中最基础的为加粗的两种
- singleton
- Spring的默认作用于, 为每个IOC容器创建唯一的Bean实例
- prototype
- 针对每个getBean请求, 都会创建一个Bean实例
- request
- 每次Http请求都会创建新的Bean, 仅适用于WebApplicationContext
- session
- 一个HttpSession定义一个Bean. 该作用于仅适用于WebApplicationContext
- globalSession
- 同一个全局Http Session 定义一个Bean. 该作用域同样仅适用于WebApplicationContext