1. 程式人生 > >Spring Bean的生命周期,《Spring 實戰》書中的官方說法

Spring Bean的生命周期,《Spring 實戰》書中的官方說法

nco process 上下文 步驟 for 接口 prop sso 包括

連著兩天的面試 ,都問到了 Spring 的Bean的生命周期,其中還包括 昨晚一波阿裏的電話面試。這裏找到了Spring 實戰中的官方說法。希望各位要面試的小夥伴記住,以後有可能,或者是有時間 去看看源碼最好(也包括我自己)。哈哈

技術分享圖片

Bean 的生命周期

  在傳統的Java應用中,bean的生命周期很簡單。使用Java 關鍵字 new 進行bean 實例化,然後該 bean 就可以使用了。一旦該bean 不再被使用,則由 java 自動進行垃圾回收。

  相比之下,Spring 容器中的 bean 的生命周期就顯得相對復雜多了。正確理解Spring bean 的生命周期非常重要,因為你或許要利用 Spring 提供的擴展點來自定義bean 的創建過程。圖1.5展示了 bean 裝載到 spring 應用上下文中的一個典型的生命周期過程。(手機拍攝的。。)

技術分享圖片

註意圖中所說:bean 在 Spring 容器中從創建到銷毀經歷了若幹階段,每一階段都可以針對 Spring 如何管理 bean 進行個性化定制

正如你所見的,在 bean 準備就緒之前, bean 工廠執行了若幹啟動步驟。我們對圖1.5 進行詳細描述:(這裏是需要背下來的

1. Spring 對 bean 進行實例化;

2. Spring 將值和 bean 的引用註入到bean 對應的屬性中;

3. 如果 bean 實現了 BeanNameAware 接口,Spring 將 bean 的 ID 傳遞給 setBeanName()方法;

4. 如果 bean 實現了 BeanFactoryAware 接口,Spring 將調用 setBeanFactory ()方法,將 BeanFactory 容器實例傳入;

5. 如果 bean 實現了 ApplicationContextAware 接口,Spring 將調用 set-ApplicationContext () 方法,將 bean 所在的應用上下文的引用傳入進來;

6. 如果 bean 實現了 BeanPostProcessor 接口,Spring 將調用他們的 post-Process-Before-Initialization () 方法;

7. 如果 bean 實現了 InitializingBean 接口,Spring 將調用它們的 after-Properties-Set () 方法。類似的,如果 bean 使用 init -method 聲明了初始化方法,該方法也會被調用;

8. 如果 bean 實現了 BeanPostProcessor 接口, Spring 將調用它們的 post-Process-After-Initialization () 方法;

9. 此時,bean 已經準備就緒,可以被應用程序使用了,它們將一直駐留在應用上下文中,直到該應用上下文被銷毀;

10. 如果 bean 實現了 Disposable-Bean 接口,Spring 將調用它的 destory () 接口方法。同樣,如果 bean 使用 destory-method 聲明了銷毀方法,該方法也會被調用。

以上就是書中所說,請牢記,面試中才能從容應對。

Spring Bean的生命周期,《Spring 實戰》書中的官方說法