2025-02-24

Spring Bean 的生命周期是怎样的? 整个生命周期大致可分为三个大的阶段,分别是:创建、使用、销毁。 还可以进一步分为五个小的阶段:实例化、初始化、注册 Destruction 回调、Bean 的正常使用以及 Bean 的销毁。 1. Bean 的定义和实例化 BeanDefinition

Spring Bean 的生命周期是怎样的?

无标题-2025-02-11-1447.png

整个生命周期大致可分为三个大的阶段,分别是:创建、使用、销毁。 还可以进一步分为五个小的阶段:实例化、初始化、注册 Destruction 回调、Bean 的正常使用以及 Bean 的销毁。

1. Bean 的定义和实例化

  • BeanDefinition 加载:Spring 容器(如 ApplicationContext)启动时,解析配置(XML、Java Config、注解等),生成 BeanDefinition 对象,描述 Bean 的元数据。
  • 实例化:通过构造函数或工厂方法创建 Bean 的实例(此时对象处于“原始”状态,未注入依赖)。

2. 依赖注入(属性赋值)

  • 填充属性:根据配置(如 @Autowired@Value、XML 的 <property>)注入依赖的 Bean 或简单值。
  • Aware 接口回调(可选):若 Bean 实现了特定 Aware 接口,Spring 会按顺序调用方法:
    1. BeanNameAware → 设置 Bean 的名称。
    2. BeanClassLoaderAware → 设置类加载器。
    3. BeanFactoryAware → 设置 BeanFactory 引用。
    4. EnvironmentAwareApplicationContextAware 等 → 注入上下文相关对象。

3. BeanPostProcessor 前置处理

  • postProcessBeforeInitialization():所有 BeanPostProcessor 在此阶段对 Bean 进行扩展处理(如修改属性值)。

4. 初始化阶段

  • @PostConstruct 注解方法:通过反射调用标记的方法。
  • InitializingBean 接口:实现 afterPropertiesSet() 方法,在属性注入完成后执行。
  • 自定义初始化方法:通过 XML 的 init-method@Bean(initMethod = "...") 指定。

5. BeanPostProcessor 后置处理

  • postProcessAfterInitialization():对初始化后的 Bean 进行处理(如生成 AOP 代理对象)。

6. Bean 就绪

  • 完成所有初始化后,Bean 被放入容器,可被其他对象依赖使用。

7. 销毁阶段(容器关闭时触发)

  • @PreDestroy 注解方法:通过反射调用标记的销毁逻辑。
  • DisposableBean 接口:实现 destroy() 方法。
  • 自定义销毁方法:通过 XML 的 destroy-method@Bean(destroyMethod = "...") 指定。
LICENSED UNDER CC BY-NC-SA 4.0
Comment