天天看點

Spring Bean的生命周期管理

Spring Bean的生命周期管理

bean的生命周期

spring bean存活于容器之中,一般情況下spring bean對context的情況并不了解,如果希望某個bean知道自己在context中的代号:bean name,即可讓該bean的類型實作beannameaware接口。

該執行個體的運作結果如下:

bean name就是一個bean在容器中的id,上述例子對應的xml檔案内容如下:

在生産環境中我還沒有用過這個接口,不過檢視spring的源碼可知,一般用于顯示bean的相關資訊,是以在我們這個例子中我也重寫了tostring方法。檢視abstractview類的代碼可知,spring中有類似的用法:

其他幾個xxxaware接口的作用也類似,在此不做贅述。

如果說上述幾個xxxaware接口的作用是定制單個bean的初始化過程,那麼beanpostprocessor接口則可以提供全局的、定制多個bean的初始化過程。beanpostprocessor接口有兩個方法:postprocessbeforeinitialization()在bean的屬性值設定之前執行;postprocessafterinitialization在bean的屬性值設定之後執行。

如果希望在bean的屬性值被設定之後還想做點工作,則可以考慮讓這個bean實作initializingbean接口。initializingbean接口中的方法afterpropertiesset()可以實作所需要的工作。

在bean的聲明周期中,afterpropertiesset()方法的調用介于postprocessbeforeinitialization()方法和postprocessafterinitialization()方法之間。

在實際項目中,可以考慮按照如下模式使用initializingbean接口: