睡前聊一聊"spring bean 生命周期"

spring bean 生命周期=实属初销+2个常见接口+3个Aware型接口+2个生命周期接口

  • 实属初销:spring bean生命周期只有四个阶段,即实例化->属性赋值->初始化->销毁,实例化对应构造方法,属性赋值对应setter
前三个阶段分别在doCreate()中按顺序调对应的方法:
  1. createBeanInstance() -> 实例化
  2. populateBean() -> 属性赋值
  3. initializeBean() -> 初始化
源码:

睡前聊一聊"spring bean 生命周期"

  • 两个常用接口:InstantiationAwareBeanPostProcessor+BeanPostProcessor
1、这两个接口功能非常强大,spring内部也常使用它们,其中InntantiationAwareBeanPostProcessor接口继承BeanPostProcessor接口,它们含有的内部方法如下: BeanPostProcessor=postProcessBeforeInitialization()+postProcessAfterInitialization() InstantiationAwareBeanPostProcessor=postProcessBeforeInstantiation()、postProcessAfterInstantiation()+继承BeanPostProcessor的上面两个接口 2、InstantiationAwareBeanPostProcessor接口作用于实例化前后,BeanPostProcessor作用于初始化前后:

睡前聊一聊"spring bean 生命周期"

 

 可知,postProcessorBeforeInstantiation在doCreateBean()=“实属初”之前

4、postProcessorAfterInstantiation在populateBean执行属性赋值之前调用

睡前聊一聊"spring bean 生命周期"

  • 3个Aware型接口
如(1)BeanNameAware、BeanFactoryAware、BeanClassLoaderAware (2)ApplicationContextAware(获取当前的ApplicationContext对象)。 xxxAware接口表示我们可以拿到spring中什么东西,如BeanNameAware代表我们可以拿到spring中的BeanName。 ApplicationContext接口与BeanFactory接口的区别是ApplicationContext继承了BeanFactory,同时扩展了其他功能方法。 调用上面(1)中的三个Aware接口-> 调用BeanPostProcessor的postProcessBeforeInitialization()接口-> InitializeBean()初始化-> 调用BeanPostProcessor的postProcessAfterInitialization()接口 睡前聊一聊"spring bean 生命周期"
  • 2个生命周期接口
上面"初始化InitializeBean()初始化"接口和"disposableBean()销毁"接口分别对应生命周期4个阶段中的初始化和销毁阶段

 

上一篇:AOP AbstractAutoProxyCreator的注册


下一篇:spring BeanPostProcessor 生命周期