spring bean 生命週期

2021-09-02 09:08:47 字數 1005 閱讀 7410

插敘一下,記得某個博文中提到:「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...