1 先问问题
Spring Bean的生命周期是什么样的?
2 按照大块分
实例化 -> 装配属性和依赖 -> 调用各种初始化方法 -> 用完销毁
3 细节
- 实例化Bean ,doCreateBean方法中的createBeanInstance,处理了构造器注入
- 装配Bean的属性,doCreateBean方法中的populateBean,处理了setter注入,Field注入和自定义方法注入
- 然后下面是初始化Bean的步骤,doCreateBean方法中的initializeBean
3.1 如果Bean本身实现了Aware接口,帮助Bean装配BeanName,ClassLoader或者BeanFactory
3.2 调用BeanPostProcessorsBeforeInitialization
3.3 如果实现了InitializingBean接口,会调用,如果定义了"init-method",调用
3.4 调用BeanPostProcessorsAfterInitialization - 最后就是两步销毁,DisposableBean的destroy()和Bean自身定义的destroy()
来看看相关的源码,其实初始化部分都发生在AbstractAutowireCapableBeanFactory的doCreateBean方法里。
image.png image.png4 依赖注入发生的时机
Bean的生命周期中,依赖注入到底发生在啥时候呢?其实上篇文章已经提到过了,这里汇总一下:
- 构造器注入,发生在实例化的时候
- setter注入,发生在populateBean
- Field注入,发生在populateBean
- 自定义方法注入,发生在populateBean
网友评论