Spring的生命周期

Spring Bean 的生命周期可以分为以下几个阶段:

  1. 实例化:在容器中创建一个 Bean 的实例。

  2. 属性赋值:向 Bean 实例中注入属性值或依赖对象。

  3. 初始化前处理(post-processor):调用 Bean 实现了相应接口的回调方法,例如 BeanNameAware、BeanFactoryAware、ApplicationContextAware 等方法。

  4. 初始化:调用 Bean 的初始化方法,例如 InitializingBean 接口的方法、自定义的 init-method 方法等。

  5. 初始化后处理(post-processor):调用 Bean 实现了相应接口的回调方法,例如 BeanPostProcessor 的 postProcessBeforeInitialization 和 postProcessAfterInitialization 方法。

  6. 使用:Bean 可以被容器和其他对象引用,此时 Bean 处于可用状态。

  7. 销毁前处理(post-processor):调用 Bean 实现了相应接口的回调方法,例如 DestructionAwareBeanPostProcessor 的 postProcessBeforeDestruction 方法。

  8. 销毁:调用 Bean 的销毁方法,例如 DisposableBean 接口的方法、自定义的 destroy-method 方法等。

 以下是一个简单的 Spring Bean 生命周期的演示:

import org.springframework.beans.factory.DisposableBean;
import org.springframework.beans.factory.InitializingBean;

public class MyBean implements InitializingBean, DisposableBean {
    private String name;

    public void setName(String name) {
        this.name = name;
    }

    public void init() {
        System.out.println("MyBean init method called");
    }

    @Override
    public void destroy() throws Exception {
        System.out.println("MyBean destroy method called");
    }

    @Override
    public void afterPropertiesSet() throws Exception {
        System.out.println("MyBean afterPropertiesSet method called");
    }
}

在上面的代码中,我们定义了一个名为 MyBean 的类。它实现了 InitializingBean 和 DisposableBean 接口,并定义了一个名为 init 的方法和一个名为 name 的属性。

在 MyBean 的初始化过程中,Spring 会按照以下顺序调用各个回调方法:

  1. 实例化 MyBean 对象。

  2. 将配置文件中的属性值或引用注入到 MyBean 对象中。

  3. 调用 MyBean 实现的 InitializingBean 接口中的 afterPropertiesSet 方法。

  4. 调用 MyBean 实现的 init 方法。

在 MyBean 的销毁过程中,Spring 会按照以下顺序调用回调方法:

  1. 调用 MyBean 实现的 DisposableBean 接口中的 destroy 方法。

  2. 调用 MyBean 自定义的销毁方法。

下面是一个 Spring 配置文件的示例,用于配置 MyBean 的生命周期:

<bean id="myBean" class="com.example.demo.MyBean" init-method="init" destroy-method="customDestroy">
    <property name="name" value="Test"/>
</bean>

在配置文件中,我们将 MyBean 的类名、init 方法和 customDestroy 方法分别指定给 id、init-method 和 destroy-method 属性。同时,我们也将 name 属性的值设置为 "Test"。

以上演示代码仅为简单示例,实际应用中可能会有更多的回调方法和复杂的配置。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值