Spring Bean的生命週期

2021-10-22 13:22:51 字數 1875 閱讀 6195

spring 容器在初始化乙個 bean 的例項時,同時會指定該例項的作用域。spring3 為 bean 定義了五種作用域,具體如下。

1)singleton

單例模式,使用 singleton 定義的 bean 在 spring 容器中只有乙個例項,這也是 bean 預設的作用域。

2)prototype

原型模式,每次通過 spring 容器獲取 prototype 定義的 bean 時,容器都將建立乙個新的 bean 例項。

3)request

在一次 http 請求中,容器會返回該 bean 的同乙個例項。而對不同的 http 請求,會返回不同的例項,該作用域僅在當前 http request 內有效。

4)session

在一次 http session 中,容器會返回該 bean 的同乙個例項。而對不同的 http 請求,會返回不同的例項,該作用域僅在當前 http session 內有效。

5)global session

在乙個全域性的 http session 中,容器會返回該 bean 的同乙個例項。該作用域僅在使用 portlet context 時有效。

在上述五種作用域中,singleton 和 prototype 是最常用的兩種,接下來將對這兩種作用域進行詳細講解。

bean 生命週期的整個執行過程描述如下。

1)根據配置情況呼叫 bean 構造方法或工廠方法例項化 bean。

2)利用依賴注入完成 bean 中所有屬性值的配置注入。

3)如果 bean 實現了 beannameaware 介面,則 spring 呼叫 bean 的 setbeanname() 方法傳入當前 bean 的 id 值。

4)如果 bean 實現了 beanfactoryaware 介面,則 spring 呼叫 setbeanfactory() 方法傳入當前工廠例項的引用。

6)如果 beanpostprocessor 和 bean 關聯,則 spring 將呼叫該介面的預初始化方法 postprocessbeforeinitialzation() 對 bean 進行加工操作,此處非常重要,spring 的 aop 就是利用它實現的。

7)如果 bean 實現了 initializingbean 介面,則 spring 將呼叫 afterpropertiesset() 方法。

8)如果在配置檔案中通過 init-method 屬性指定了初始化方法,則呼叫該初始化方法。

9)如果 beanpostprocessor 和 bean 關聯,則 spring 將呼叫該介面的初始化方法 postprocessafterinitialization()。此時,bean 已經可以被應用系統使用了。

10)如果在 中指定了該 bean 的作用範圍為 scope=「singleton」,則將該 bean 放入 spring ioc 的快取池中,將觸發 spring 對該 bean 的生命週期管理;如果在 中指定了該 bean 的作用範圍為 scope=「prototype」,則將該 bean 交給呼叫者,呼叫者管理該 bean 的生命週期,spring 不再管理該 bean。

11)如果 bean 實現了 disposablebean 介面,則 spring 會呼叫 destory() 方法將 spring 中的 bean 銷毀;如果在配置檔案中通過 destory-method 屬性指定了 bean 的銷毀方法,則 spring 將呼叫該方法對 bean 進行銷毀。

spring 為 bean 提供了細緻全面的生命週期過程,通過實現特定的介面或 的屬性設定,都可以對 bean 的生命週期過程產生影響。雖然可以隨意配置 的屬性,但是建議不要過多地使用 bean 實現介面,因為這樣會導致**和 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...