Spring Boot中的Bean生命周期管理

Bean 生命周期管理是 Spring Boot 中的关键功能之一。它负责管理应用程序中的 Java 对象,这些对象被称为 Beans。Spring Boot 通过创建、配置、初始化和销毁这些 Beans 来确保应用程序的正常运行。这个功能的目的是提供一种灵活的方式,使开发人员能够轻松地管理对象的生命周期,从而实现高效的依赖注入和组件化开发。

Bean生命周期的具体步骤:

1、实例化:在 Spring 容器启动时,Spring 会创建配置中定义的所有 Bean。这是通过 Java 类的构造函数或工厂方法来完成的。

2、属性注入:一旦 Bean 被实例化,Spring 会注入所有相关的属性,包括通过构造函数注入或 Setter 方法注入的属性。

3、初始化方法调用:一旦属性被注入,Spring 容器会调用 Bean 的初始化方法。这可以通过@PostConstruct注解、实现InitializingBean接口来完成。初始化过程还提供了一些扩展口:BeanNameAware,BeanFactoryAware,ApplicationContextAware

4、使用 Bean:Bean 现在可以在应用程序中使用,执行其业务逻辑。

5、销毁方法调用:当 Spring 容器关闭时,它会调用 Bean 的销毁方法以释放资源。这可以通过@PreDestroy注解、实现DisposableBean接口来完成。

Bean生命周期管理的使用场景:

  • 依赖注入:当你需要将一个对象注入到另一个对象中时,Bean 的生命周期管理可以确保被注入的对象已正确初始化。
  • 配置管理:如果你希望根据不同的环境或配置文件来配置 Bean 的属性,Bean 的生命周期管理可以帮助你实现这一目标。
  • 组件扩展:当你需要创建自定义的 Bean,以扩展 Spring Boot 的功能时,Bean 的生命周期管理可以为你提供扩展点。

代码演示Bean初始化:

编写代码演示Bean初始化各个节点。演示代码将创建 TestSupport 类和 BeanPostProcessorImpl 类。

TestSupport类:


import com.alibaba.fastjson2.JSON;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.BeanFactoryAware;
import org.springframework.beans.factory.BeanNameAware;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
// 以下为 TestSupport 类的具体实现内容
  • BeanNameAware:通过实现BeanNameAware接口并重写setBeanName方法可以获取到bean的name
  • BeanFactoryAware:通过实现BeanFactoryAware接口并重写setBeanFactory方法可以在bean初始化过程中添加额外的扩展。
  • ApplicationContextAware:通过实现ApplicationContextAware接口并重写setApplicationContext方法可以在bean初始化过程中添加额外扩展。
  • InitializingBean:通过实现InitializingBean接口并重写afterPropertiesSet 方法可以在bean初始化过程中添加额外扩展。
  • @PostConstruct注解:通过在方法上面添加@PostConstruct注解来执行一些自定义的业务代码。

BeanPostProcessorImpl类:


import com.ramble.beanlife.support.TestSupport;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanPostProcessor;
import org.springframework.stereotype.Component;
// 以下为 BeanPostProcessorImpl 类的具体实现内容
  • postProcessBeforeInitialization:bean 加工器之在bean初始化完毕之前的预处理。
  • postProcessAfterInitialization:bean 加工器之在bean初始化之后的预处理。

log输出:


2024-04-07 15:25:33.488  INFO 51628 --- [           main] com.ramble.beanlife.support.TestSupport  : TestSupport-BeanNameAware-setBeanName.param=testSupport
//...(省略部分log内容)

通过log打印的顺序可以观测到bean初始化的各个扩展口的执行顺序。

相关代码文件:

相关代码可以在以下链接中找到:
https://gitee.com/naylor_personal/ramble-spring-boot/tree/master/bean-life

未经允许不得转载:大白鲨游戏网 » Spring Boot中的Bean生命周期管理