Spring的Bean生命周期探究

1 先问问题

Spring Bean的生命周期是什么样的?

2 按照大块分

实例化 -> 装配属性和依赖 -> 调用各种初始化方法 -> 用完销毁

3 细节

  1. 实例化Bean ,doCreateBean方法中的createBeanInstance,处理了构造器注入
  2. 装配Bean的属性,doCreateBean方法中的populateBean,处理了setter注入,Field注入和自定义方法注入
  3. 然后下面是初始化Bean的步骤,doCreateBean方法中的initializeBean
    3.1 如果Bean本身实现了Aware接口,帮助Bean装配BeanName,ClassLoader或者BeanFactory
    3.2 调用BeanPostProcessorsBeforeInitialization
    3.3 如果实现了InitializingBean接口,会调用,如果定义了"init-method",调用
    3.4 调用BeanPostProcessorsAfterInitialization
  4. 最后就是两步销毁,DisposableBean的destroy()和Bean自身定义的destroy()

来看看相关的源码,其实初始化部分都发生在AbstractAutowireCapableBeanFactory的doCreateBean方法里。

image.png
image.png

4 依赖注入发生的时机

Bean的生命周期中,依赖注入到底发生在啥时候呢?其实上篇文章已经提到过了,这里汇总一下:

  • 构造器注入,发生在实例化的时候
  • setter注入,发生在populateBean
  • Field注入,发生在populateBean
  • 自定义方法注入,发生在populateBean

你可能感兴趣的:(Spring的Bean生命周期探究)