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


  • 实属初销:spring bean生命周期只有四个阶段,即实例化->属性赋值->初始化->销毁,实例化对应构造方法,属性赋值对应setter

前三个阶段分别在doCreate()中按顺序调对应的方法:

  1. createBeanInstance() -> 实例化
  2. populateBean() -> 属性赋值
  3. initializeBean() -> 初始化

源码:


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

  • 两个常用接口:InstantiationAwareBeanPostProcessor+BeanPostProcessor

1、这两个接口功能非常强大,spring内部也常使用它们,其中InntantiationAwareBeanPostProcessor接口继承BeanPostProcessor接口,它们含有的内部方法如下:

BeanPostProcessor=postProcessBeforeInitialization()+postProcessAfterInitialization()

InstantiationAwareBeanPostProcessor=postProcessBeforeInstantiation()、postProcessAfterInstantiation()+继承BeanPostProcessor的上面两个接口

2、InstantiationAwareBeanPostProcessor接口作用于实例化前后,BeanPostProcessor作用于初始化前后:


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

 

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

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

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

  • 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 生命周期"_spring bean_04

  • 2个生命周期接口

上面"初始化InitializeBean()初始化"接口和"disposableBean()销毁"接口分别对应生命周期4个阶段中的初始化和销毁阶段