天天看點

解釋Spring架構中bean的生命周期

在傳統的Java應用中,bean的生命周期很簡單。使用Java關鍵字new進行bean執行個體化,然後該bean就可以使用了。一旦該bean不再被使用,則由Java自動進行垃圾回收。相比之下,Spring容器中的bean的生命周期就顯得相對複雜多了。正确了解Spring bean的生命周期非常重要,因為你或許要利用Spring提供的擴充點來自定義bean的建立過程。下圖展示了bean裝載到Spring應用上下文中的一個典型的生命周期過程。

解釋Spring架構中bean的生命周期

bean在Spring容器中從建立到銷毀經曆了若幹階段,每一階段都可以針對Spring如何管理bean進行個性化定制。

正如你所見,在bean準備就緒之前,bean工廠執行了若幹啟動步驟。

我們對上圖進行較長的描述:

Spring對bean進行執行個體化;

Spring将值和bean的引用注入到bean對應的屬性中;

如果bean實作了BeanNameAware接口,Spring将bean的ID傳遞給setBean-Name()方法;

如果bean實作了BeanFactoryAware接口,Spring将調用setBeanFactory()方法,将BeanFactory容器執行個體傳入;

如果bean實作了ApplicationContextAware接口,Spring将調用setApplicationContext()方法,将bean所在的應用上下文的引用傳入進來;

如果bean實作了BeanPostProcessor接口,Spring将調用它們的post-ProcessBeforeInitialization()方法;

如果bean實作了InitializingBean接口,Spring将調用它們的after-PropertiesSet()方法。類似地,如果bean使用initmethod聲明了初始化方法,該方法也會被調用;

如果bean實作了BeanPostProcessor接口,Spring将調用它們的post-ProcessAfterInitialization()方法;

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