1. 程式人生 > >例項注入Bean的幾種形式,特別注意多例模式下Bean生命週期無人管理

例項注入Bean的幾種形式,特別注意多例模式下Bean生命週期無人管理

3. bean的生命週期
(1)什麼時候例項化?

對於單例的形式,在容器例項化的時候對bean進行例項化的。www.cdtarena.com

ApplicationContext ctx=new ClassPathXmlApplicationContext(new String[]{"applicationContext.xml"});

單例項可以通過lazy-init=”true”,在getBean時進行例項化。

在beans裡面default-lazy-init=”true”對所有bean進行延遲處理。

對於prototype,則是在getBean的時候被例項化的。

(2)在bean被例項化之後執行資源操作等方法:

Init-method=””

(3)在bean銷燬之前執行的方法:

Destroy-method=””

什麼時候被銷燬?隨著spring容器被關閉時被銷燬。

呼叫spring容器的close方法來正常關閉。以前是隨著應用程式執行完而關閉。


在Spring裝載配置檔案後,Spring工廠例項化完成,開始處理

(1)使用預設構造方法或指定構造引數進行Bean例項化。

(2)根據property標籤的配置呼叫Bean例項中的相關set方法完成屬性的賦值。

(3)如果Bean實現了BeanNameAware介面,則呼叫setBeanName()方法傳入當前Bean的ID。

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

(5)如果Bean實現了ApplicationContextAware介面,則呼叫setApplicationContext()方法傳入當前ApplicationContext例項的引用。

(6)如果有BeanPostProcessor與當前Bean關聯,則與之關聯的物件的postProcess- BeforeInitialzation()方法將被呼叫。

(7)如果在配置檔案中配置Bean時設定了init-method屬性,則呼叫該屬性指定的初始化方法。

(8)如果有BeanPostProcessor與當前Bean關聯,則與之關聯的物件的postProcess- AfterInitialzation()方法將被呼叫。

(9)Bean例項化完成,處於待用狀態,可以被正常使用了。

(10)當Spring容器關閉時,如果Bean實現了DisposableBean介面,則destroy()方法將被呼叫。

(11)如果在配置檔案中配置Bean時設定了destroy-method屬性,則呼叫該屬性指定的方法進行銷燬前的一些處理。

(12)Bean例項被正常銷燬。