生命週期執行的過程如下:
1)spring在讀取xml配置檔案時對bean進行例項化,預設bean是單例
2)spring對bean進行依賴注入
3)如果bean實現了beannameaware介面,spring將bean的id傳給setbeanname()方法
4)如果bean實現了beanfactoryaware介面,spring將呼叫setbeanfactory方法,將beanfactory例項傳進來
6) 如果bean實現了beanpostprocessor介面,spring將呼叫它們的postprocessbeforeinitialization介面方法
7) 如果bean實現了initializingbean介面,spring將呼叫它們的afterpropertiesset介面方法,類似的如果bean使用了init-method屬性宣告了初始化方法,改方法也會被呼叫
8)如果bean實現了beanpostprocessor介面,spring將呼叫它們的postprocessafterinitialization介面方法
9)此時bean已經準備就緒,可以被應用程式使用了,他們將一直駐留在應用上下文中,直到該應用上下文被銷毀
10)若bean實現了disposablebean介面,spring將呼叫它的distroy()介面方法。同樣的,如果bean使用了destroy-method屬性宣告了銷毀方法,則該方法被呼叫
其實很多時候我們並不會真的去實現上面說描述的那些介面,那麼下面我們就除去那些介面針對bean的單例和非單例來描述下bean的生命週期
spring不僅可以控制注入到物件中的各種依賴和配置值,還可以控制該物件的作用域
當乙個bean的作用域為singleton,那麼spring ioc容器中只會存在乙個共享的bean例項,並且所有對bean的請求,只要id與該bean定義相匹配,則只會返回bean的同一例項。singleton是單例型別,就是在建立起容器時就同時自動建立了乙個bean的物件,不管你是否使用,他都存在了,每次獲取到的物件都是同乙個物件。注意,singleton作用域是spring中的預設作用域。要在xml中將bean定義成singleton,可以這樣配置:
當乙個bean的作用域為prototype,表示乙個bean定義對應多個物件例項。prototype作用域的bean會導致在每次對該bean請求(將其注入到另乙個bean中,或者以程式的方式呼叫容器的getbean()方法)時都會建立乙個新的bean例項。prototype是原型型別,它在我們建立容器的時候並沒有例項化,而是當我們獲取bean的時候才會去建立乙個物件,而且我們每次獲取到的物件都不是同乙個物件。根據經驗,對有狀態的bean應該使用prototype作用域,而對無狀態的bean則應該使用singleton作用域。在xml中將bean定義成prototype,可以這樣配置:
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...