Spring Bean的生命周期簡單易懂。在一個bean實例被初始化時,需要執行一系列的初始化操作以達到可用的狀態。同樣的,當一個bean不再被調用時需要進行相關的析構操作,并從bean容器中移除。
Spring bean factory 負責管理在spring容器中被創建的bean的生命周期。Bean的生命周期由兩組回調(call back)方法組成。
> 初始化之后調用的回調方法。
> 銷毀之前調用的回調方法。
> Spring框架提供了以下四種方式來管理bean的生命周期事件:
> InitializingBean和DisposableBean回調接口
> 針對特殊行為的其他Aware接口
> Bean配置文件中的Custom init()方法和destroy()方法
> @PostConstruct和@PreDestroy注解方式
Bean的生命周期可以表達為:Bean的定義——Bean的初始化——Bean的使用——Bean的銷毀
初始化回調
org.springframework.beans.factory.InitializingBean 接口指定一個單一的方法:
因此,你可以簡單地實現上述接口和初始化工作可以在 afterPropertiesSet() 方法中執行,如下所示:
在基于 XML 的配置元數據的情況下,你可以使用 init-method 屬性來指定帶有 void 無參數方法的名稱。例如:
下面是類的定義:
銷毀回調
org.springframework.beans.factory.DisposableBean 接口指定一個單一的方法:
因此,你可以簡單地實現上述接口并且結束工作可以在 destroy() 方法中執行,如下所示:
在基于 XML 的配置元數據的情況下,你可以使用 destroy-method 屬性來指定帶有 void 無參數方法的名稱。例如:
下面是類的定義:
如果你在非 web 應用程序環境中使用 Spring 的 IoC 容器;例如在豐富的客戶端桌面環境中;那么在 JVM 中你要注冊關閉 hook。這樣做可以確保正常關閉,為了讓所有的資源都被釋放,可以在單個 beans 上調用 destroy 方法。
建議你不要使用 InitializingBean 或者 DisposableBean 的回調方法,因為 XML 配置在命名方法上提供了極大的靈活性。