在 Spring 框架中,IoC(Inversion of Control)容器负责管理 bean 的生命周期。这个生命周期包括从 bean 的创建到销毁的全过程,涉及多个阶段,每个阶段都有特定的回调接口或注解可以用来进行自定义处理。以下是 Spring bean 生命周期的各个阶段:

1. 实例化(Instantiation)

当 IoC 容器启动并加载配置时,会根据配置(XML 、注解、 Java 配置类等)创建 bean 的实例。在这个阶段,Spring 使用反射机制调用 bean 的构造函数来实例化对象。

2. 属性注入(Populate Properties)

实例化后,Spring 会进行依赖注入,将配置中的属性值或其他 bean 注入到刚刚创建的 bean 实例中。这包括对 @Autowired@Value 等注解的处理。

3. 初始化(Initialization)

在这个阶段,Spring 允许 bean 执行任何初始化操作。可以通过以下方式进行自定义初始化:

  • 实现 InitializingBean 接口:重写 afterPropertiesSet() 方法。
  • 使用 @PostConstruct 注解:标记一个初始化方法。
  • 在配置中指定 init-method 属性:指定一个初始化方法。

4. 使用(Usage)

经过初始化后,bean 进入使用阶段。在这个阶段,bean 可以被应用程序的其他部分使用。

5. 销毁(Destruction)

当容器关闭时,Spring 会销毁 bean 。可以通过以下方式进行自定义销毁操作:

  • 实现 DisposableBean 接口:重写 destroy() 方法。
  • 使用 @PreDestroy 注解:标记一个销毁方法。
  • 在配置中指定 destroy-method 属性:指定一个销毁方法。

详细流程

  1. 实例化:Spring 容器根据 bean 的定义创建 bean 实例。
  2. 依赖注入:注入所需的属性和依赖。
  3. BeanPostProcessor 前置处理:如果有实现 BeanPostProcessor 接口的类,会调用 postProcessBeforeInitialization 方法。
  4. 初始化:调用初始化方法。
  5. BeanPostProcessor 后置处理:调用 postProcessAfterInitialization 方法。
  6. 使用:Bean 准备好供应用程序使用。
  7. 销毁:在容器关闭时,调用销毁方法进行清理。

代码示例

import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;

public class MyBean {

    public MyBean() {
        System.out.println("Bean is being instantiated");
    }

    @PostConstruct
    public void init() {
        System.out.println("Bean is going through init");
    }

    @PreDestroy
    public void destroy() {
        System.out.println("Bean will be destroyed now");
    }
}

在这个示例中,@PostConstruct 和 @PreDestroy 注解用于定义初始化和销毁方法。 Spring 在 bean 生命周期的适当阶段调用这些方法。

通过理解 Spring bean 的生命周期,开发人员可以更好地管理资源,确保在适当的时机执行必要的初始化和清理操作。

posted on 2025-03-12 14:22  卡米i  阅读(5)  评论(0)    收藏  举报