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 配置在命名方法上提供了极大的灵活性。