(轉)spring的生命週期

做者:韓小彬
連接:https://www.zhihu.com/question/38597960/answer/77600561
來源:知乎
著做權歸做者全部。商業轉載請聯繫做者得到受權,非商業轉載請註明出處。

Spring中Bean生命週期過程:
程序員

1.Spring對Bean進行實例化(至關於程序中的new Xx())post

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 )it

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

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

此處能夠用於某些,須要在服務啓動時,執行的方法。親測容器

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

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

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

參考:Spring實戰

相關文章
相關標籤/搜索