標籤:

Spring Bean生命周期

我在2015年3月買了一本書《Spring實戰》(第3版),第一章用了一頁多的篇幅介紹了Spring Bean生命周期。因為這不是該書重點,所以就一筆帶過了。我上家公司的項目中沒有用到Spring,所以學習進度極慢。後來對Spring了解越來越多,這個問題又引起了重視。

Spring容器有兩種實現方式:BeanFactory 和 ApplicationContext。現在以後者說明闡述bean的生命周期,至於前者稍有不同,請閱讀參考資料。

ApplicationContext Bean生命周期

不想解釋這張圖了,因為它本身就明晰。也不想貼代碼了,隨時都可以寫個例子。

只想說Spring提供的介面,可以讓我們定製個性化的bean。至於若干階段的順序,我們需要明確InitializingBean和DisposableBean是一對,init-method和destroy-method也是一對,而前者是在後者前面。而在使用之前,他們前後各有BeanPostProcessor的兩個方法。再調用這些方法之前,前面又有BeanNameAware,BeanFactoryAware和ApplicationContextAware介面的方法。

經過BeanPostProcessor.postProcessAfterInitialization()之後,就可以正式使用該Bean了,對於scope為singleton的Bean,Spring的ioc容器中會緩存一份該bean的實例,而對於scope為prototype的Bean,每次被調用都會new一個新的對象,期生命周期就交給調用方管理了,不再是Spring容器進行管理了.

現在考慮一個問題:Spring搞這麼多初始化的流程有什麼區別?

So basically the BeanPostProcessor can be used to do custom instantiation logic for several beans wheras the others are defined on a per bean basis.

看起來只有先後順序和定義位置的不同

參考資料:

Spring Bean生命周期

What is the difference between BeanPostProcessor and init/destroy method in Spring?

推薦閱讀:

初識Spring ^_^ !
Spring Cloud雲服務架構代碼結構構建
CVE-2018-1270:spring-messaging遠程代碼執行漏洞分析預警
史上最簡單的SpringCloud教程 | 第三篇: 服務消費者(Feign)
跨域——CORS詳解

TAG:Spring |