1 先問問題
Spring Bean的生命周期是什么樣的?
2 按照大塊分
實例化 -> 裝配屬性和依賴 -> 調用各種初始化方法 -> 用完銷毀
3 細節(jié)
- 實例化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()
來看看相關的源碼,其實初始化部分都發(fā)生在AbstractAutowireCapableBeanFactory的doCreateBean方法里权悟。
4 依賴注入發(fā)生的時機
Bean的生命周期中砸王,依賴注入到底發(fā)生在啥時候呢?其實上篇文章已經提到過了峦阁,這里匯總一下:
- 構造器注入谦铃,發(fā)生在實例化的時候
- setter注入,發(fā)生在populateBean
- Field注入榔昔,發(fā)生在populateBean
- 自定義方法注入驹闰,發(fā)生在populateBean