写点什么

Spring Bean 的生命周期(详细解读)

作者:千锋IT教育
  • 2022-11-18
    北京
  • 本文字数:1138 字

    阅读完需:约 4 分钟

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 接口指定一个单一的方法:

void afterPropertiesSet() throws Exception;复制代码
复制代码

因此,你可以简单地实现上述接口和初始化工作可以在 afterPropertiesSet() 方法中执行,如下所示:

public class ExampleBean implements InitializingBean {   public void afterPropertiesSet() {      // do some initialization work   }}复制代码
复制代码

在基于 XML 的配置元数据的情况下,你可以使用 init-method 属性来指定带有 void 无参数方法的名称。例如:

<bean id="exampleBean"          class="examples.ExampleBean" init-method="init"/>复制代码
复制代码

下面是类的定义:

public class ExampleBean {   public void init() {      // do some initialization work   }}复制代码
复制代码

销毁回调

org.springframework.beans.factory.DisposableBean 接口指定一个单一的方法:

void destroy() throws Exception;复制代码
复制代码

因此,你可以简单地实现上述接口并且结束工作可以在 destroy() 方法中执行,如下所示:

public class ExampleBean implements DisposableBean {   public void destroy() {      // do some destruction work   }}复制代码
复制代码

在基于 XML 的配置元数据的情况下,你可以使用 destroy-method 属性来指定带有 void 无参数方法的名称。例如:

<bean id="exampleBean"         class="examples.ExampleBean" destroy-method="destroy"/>复制代码
复制代码

下面是类的定义:

public class ExampleBean {   public void destroy() {      // do some destruction work   }}复制代码
复制代码

如果你在非 web 应用程序环境中使用 Spring 的 IoC 容器;例如在丰富的客户端桌面环境中;那么在 JVM 中你要注册关闭 hook。这样做可以确保正常关闭,为了让所有的资源都被释放,可以在单个 beans 上调用 destroy 方法。

建议你不要使用 InitializingBean 或者 DisposableBean 的回调方法,因为 XML 配置在命名方法上提供了极大的灵活性。

用户头像

国内IT培训机构良心品牌 2022-08-02 加入

学习资料下载获取,添加QQ:3547925594

评论

发布
暂无评论
Spring Bean的生命周期(详细解读)_千锋IT教育_InfoQ写作社区