Spring(https://www.zhihu.com/question/38597960)

Spring中Bean生命週期過程:


1.Spring對Bean進行實例化(相當於程序中的new Xx())

2.Spring將值和Bean的引用注入進Bean對應的屬性中

3.如果Bean實現了BeanNameAware接口,Spring將Bean的ID傳遞給setBeanName()方法
(實現BeanNameAware清主要是爲了通過Bean的引用來獲得Bean的ID,一般業務中是很少有用到Bean的ID的


4.如果Bean實現了BeanFactoryAware接口,Spring將調用setBeanDactory(BeanFactory bf)方法並把BeanFactory容器實例作爲參數傳入。
(實現BeanFactoryAware 主要目的是爲了獲取Spring容器,如Bean通過Spring容器發佈事件等)

5.如果Bean實現了ApplicationContextAwaer接口,Spring容器將調用setApplicationContext(ApplicationContext ctx)方法,把y應用上下文作爲參數傳入.
(作用與BeanFactory類似都是爲了獲取Spring容器,不同的是Spring容器在調用setApplicationContext方法時會把它自己作爲setApplicationContext 的參數傳入,而Spring容器在調用setBeanDactory前需要程序員自己指定(注入)setBeanDactory裏的參數BeanFactory )

6.如果Bean實現了BeanPostProcess接口,Spring將調用它們的postProcessBeforeInitialization(預初始化)方法
(作用是在Bean實例創建成功後對進行增強處理,如對Bean進行修改,增加某個功能)

7.如果Bean實現了InitializingBean接口,Spring將調用它們的afterPropertiesSet方法,作用與在配置文件中對Bean使用init-method聲明初始化的作用一樣,都是在Bean的全部屬性設置成功後執行的初始化方法。

8.如果Bean實現了BeanPostProcess接口,Spring將調用它們的postProcessAfterInitialization(後初始化)方法
(作用與6的一樣,只不過6是在Bean初始化前執行的,而這個是在Bean初始化後執行的,時機不同 )

9.經過以上的工作後,Bean將一直駐留在應用上下文中給應用使用,直到應用上下文被銷燬

10.如果Bean實現了DispostbleBean接口,Spring將調用它的destory方法,作用與在配置文件中對Bean使用destory-method屬性的作用一樣,都是在Bean實例銷燬前執行的方法。

發佈了44 篇原創文章 · 獲贊 3 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章