插敘一下,記得某個博文中提到:「spring的bean容器只管理非單例bean的生命週期,單例bean的生命週期不在管理範圍內」,其實我認為這句話恰好說反了。首先明確一點,並非spring容器中所有的bean都有生命週期行為,只有接受容器管理生命週期的bean才具有生命週期行為:而單例(singleton)bean接受容器管理,非單例(non-singleton)bean在例項化後,完全交給了客戶端**管理,容器不再跟蹤其生命週期,每次客戶請求,容器都會建立乙個新的例項,所以spring容易無法知曉bean何時銷毀。
繼續剛才的話題——bean容器的生命週期。其實上圖有個節點沒有畫出,就是在例項化所有bean之前會執行beanfactorypostprocessors。不過也不care,因為這和bean的生命週期沒有太大關係,所以沒有提及也屬正常,權且忽略該節點。
從圖中,我們可以看到例項化bean的過程中有以下幾個節點:
1)設定屬性值;
2)呼叫bean中的beannameaware.setbeanname()方法,如果該bean實現了beannameaware介面;
3)呼叫bean中的beanfactoryaware.setbeanfactory()方法,如果該bean實現了beanfactoryaware介面;
4)呼叫beanpostprocessors.postprocessbeforeinitialization()方法;
5)呼叫bean中的afterpropertiesset方法,如果該bean實現了initializingbean介面;
6)呼叫bean中的init-method,通常是在配置bean的時候指定了init-method,例如:
7)呼叫beanpostprocessors.postprocessafterinitialization()方法;
8)如果該bean是單例的,則當容器銷毀並且該bean實現了disposablebean介面的時候,呼叫destory方法;如果該bean是prototype,則將準備好的bean提交給呼叫者,後續不再管理該bean的生命週期。
**
Spring Bean生命週期
1.容器尋找bean的定義資訊並且將其實例化。2.受用依賴注入,spring按照bean定義資訊配置bean的所有屬性。3.如果bean實現了beannameaware介面,工廠呼叫bean的setbeanname 方法傳遞bean的id。4.如果bean實現了beanfactoryaware介面,...
spring bean生命週期
生命週期 定義,初始化,使用,銷毀 一.初始化 方法1.實現org.springframework.beans.foctory.initializingbean介面,覆蓋afterpropertiesset方法。系統會自動查詢afterpropertiesset方法,執行其中的初始化操作 方法2.配...
Springbean生命週期
springbean的完整生命週期大致如下 1 首先例項化 beanfactorypostprocessor的實現類,執行它的postprocessorbeanfactory方法 2 例項化beanpostprocessor 的實現類 3 例項化 instantiationawarebeanpost...