Spring bean 生命週期

2021-09-23 23:48:02 字數 1277 閱讀 3428

對bean例項化建立bean;

通過反射呼叫set方法進行屬性的依賴注入;

如果bean實現了beannameaware介面,spring將bean的id傳給setbeanname()方法,來設定bean的name;

如果bean實現了beanfactoryaware介面,spring將呼叫setbeanfactory()方法,將beanfactory例項傳進來,設定beanfactory;

如果bean實現了beanpostprocessor介面,它的前置處理方法postprocessbeforeinitialization 將被呼叫;

如果bean實現了initializingbean介面,將呼叫它的afterpropertiesset介面方法;

執行自定義的init方法;

如果bean實現了beanpostprocessor介面,它的後置處理方法postprocessafterinitialization 將被呼叫;

到此,bean已經完成準備,可以使用了;

最後就是銷毀:若bean實現了disposablebean介面,spring將呼叫它的distroy()介面方法。同樣的,如果bean使用了destroy-method屬性宣告了銷毀方法,則該方法被呼叫

其實大部分的時候上面說的這些介面,我們都不會去實現

1、單例管理

當scope=」singleton」,即預設情況下,會在啟動容器時(即例項化容器時)時例項化。但我們可以指定bean節點的lazy-init=」true」來 延遲初始化bean,這時候,只有在第一次獲取bean時才會初始化bean,即第一次請求該bean時才初始化。

2、非單例管理

當scope=」prototype」時,容器也會延遲初始化 bean,spring 讀取 xml 檔案的時候,並不會立刻建立物件,而是在每次請求bean時才初始化(如呼叫getbean方法時,相當於new ***bean())。在第一次請求每乙個 prototype 的 bean 時,spring 容器都會呼叫其構造器建立這個物件,然後呼叫 init-method 屬性值中所指定的方法。 物件銷毀的時候,spring容器不會幫我們呼叫任何方法,因為是非單例,這個型別的物件有很多個,spring容器一旦把這個物件交給你之後,就不再管理這個物件了。

參考

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...