Spring Bean 生命周期四大阶段详细梳理

Spring Bean 生命周期整体划分为实例化阶段、属性填充阶段、初始化阶段、销毁阶段四大核心阶段,每个阶段包含细分执行步骤与核心逻辑,以下是各阶段完整明细说明。

一、实例化阶段

阶段核心作用

完成 Bean 定义的加载解析,通过反射创建 Bean 空实例对象,仅完成对象创建,未进行属性赋值。

阶段详细执行步骤

  1. 加载并解析 Bean 定义 Spring 容器读取配置信息(注解 / XML),包括@Component@Bean<bean>标签等,解析每个 Bean 的类全路径、作用域、依赖关系等配置信息。
  2. 封装 BeanDefinition 对象 将解析后的 Bean 配置信息,封装成BeanDefinition对象,统一存储到 Bean 定义注册表中,供后续实例化使用。
  3. 反射实例化 Bean 对象 容器根据BeanDefinition中的类信息,通过 Java 反射机制,调用 Bean 的构造方法(无参 / 有参构造),创建 Bean 的空实例对象,此时对象所有属性均为默认值(null、0 等)。
  4. 阶段收尾完成空对象创建,进入下一属性填充阶段,单例 Bean 会提前暴露对象引用,为解决循环依赖做准备。

二、属性填充阶段

阶段核心作用

完成 Bean 的依赖注入与属性赋值,为空实例对象填充所有依赖对象和普通属性值。

阶段详细执行步骤

  1. 依赖注入解析容器扫描 Bean 中的注入注解和配置,识别需要注入的依赖、属性值。
  2. 执行注解驱动的属性注入 通过@Autowired@Resource@Qualifier等注解,完成依赖对象的自动装配;通过@Value注解,完成普通属性、配置文件值、SpEL 表达式的注入。
  3. Setter 方法属性赋值针对 XML 配置或 Java 配置中指定的 setter 方式,调用对应 setter 方法完成属性填充。
  4. 集合 / 数组类型注入对 List、Map、数组等集合类型属性,自动装配同类型所有 Bean,完成集合属性赋值。
  5. 阶段收尾所有属性、依赖全部注入完成,Bean 对象具备完整属性,进入初始化阶段。

三、初始化阶段

阶段核心作用

对完成属性填充的 Bean 进行初始化增强,执行自定义初始化逻辑,生成代理对象,让 Bean 达到可用状态。

阶段详细执行步骤

  1. 执行 Aware 接口回调 按顺序调用 Aware 系列接口,让 Bean 获取 Spring 容器资源:
    • 执行BeanNameAware#setBeanName:获取 Bean 在容器中的名称
    • 执行BeanFactoryAware#setBeanFactory:获取 BeanFactory 容器对象
    • 执行ApplicationContextAware#setApplicationContext:获取应用上下文对象
  2. 执行 BeanPostProcessor 前置处理 调用BeanPostProcessor#postProcessBeforeInitialization方法,对 Bean 进行初始化前的增强处理。
  3. 执行自定义初始化方法 按固定顺序执行三种初始化逻辑:
    • 执行@PostConstruct注解标注的方法
    • 执行InitializingBean#afterPropertiesSet接口方法
    • 执行@Bean(initMethod)或 XML 配置的自定义初始化方法
  4. 执行 BeanPostProcessor 后置处理 调用BeanPostProcessor#postProcessAfterInitialization方法,完成 Bean 的 AOP 代理生成,这是初始化阶段最后一步。
  5. 阶段收尾初始化完成,Bean 成为完全可用的对象,存入单例池(单例 Bean),供业务使用。

四、销毁阶段

阶段核心作用

容器关闭时,释放 Bean 资源,执行自定义销毁逻辑,完成资源回收。

阶段详细执行步骤

  1. 容器触发关闭信号 调用context.close()方法关闭 Spring 容器,容器开始对单例 Bean 执行销毁逻辑(原型 Bean 不交由容器管理销毁)。
  2. 执行自定义销毁方法 按固定顺序执行三种销毁逻辑:
    • 执行@PreDestroy注解标注的方法
    • 执行DisposableBean#destroy接口方法
    • 执行@Bean(destroyMethod)或 XML 配置的自定义销毁方法
  3. 资源释放与对象销毁完成资源释放、连接关闭等操作后,容器移除 Bean 实例,完成整个生命周期。

四大阶段核心总结

  1. 实例化阶段:加载配置→反射创建空对象
  2. 属性填充阶段:依赖注入→属性赋值
  3. 初始化阶段:Aware 回调→初始化方法→AOP 代理
  4. 销毁阶段:执行销毁逻辑→资源回收
相关推荐
抠脚小弟3 小时前
Spring Cache 使用详解:从入门到实战
java·spring
计算机学姐12 小时前
基于SpringBoot的高校爱心慈善管理系统
java·vue.js·spring boot·后端·spring·tomcat·mybatis
都叫我大帅哥12 小时前
Apache Tika 4.0 正式发布:RAG 时代文件解析的终极答案
java·spring boot·spring
霸道流氓气质1 天前
Spring AI 输出解析器进阶
人工智能·windows·spring
leonkay1 天前
C# 锁机制——【2】深入原理
开发语言·后端·spring·c#·个人开发
霸道流氓气质1 天前
Spring AI 技术细节:RAG QuestionAnswerAdvisor 设计与实现
java·人工智能·spring
重生之我是Java开发战士1 天前
【Spring Cloud】认识微服务与工程搭建
spring·spring cloud·微服务
霸道流氓气质1 天前
Spring AI 多模态开发指南:图片理解与语音合成
java·人工智能·spring
后台模板学习1 天前
用 IM 即时聊天项目一次讲清消息去重算法的踩坑与解决方案
java·数据库·spring
霸道流氓气质1 天前
Spring AI 技术细节:VectorStore 多库统一抽象
java·人工智能·spring