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. 销毁阶段:执行销毁逻辑→资源回收
相关推荐
xmjd msup1 小时前
spring security 超详细使用教程(接入springboot、前后端分离)
java·spring boot·spring
myrh pdmd4 小时前
maven导入spring框架
数据库·spring·maven
BENA ceic7 小时前
Spring 的三种注入方式?
java·数据库·spring
二哈赛车手7 小时前
新人笔记---项目中简易版的RAG检索后评测指标(@Recall ,Mrr..)实现
java·开发语言·笔记·spring·ai
NaMM CHIN8 小时前
Spring Boot + Spring AI快速体验
人工智能·spring boot·spring
norq juox8 小时前
Spring 中集成Hibernate
java·spring·hibernate
java1234_小锋9 小时前
Spring AI 2.0 开发Java Agent智能体 - stream()方法Flux流式响应输出
java·人工智能·spring
vooy pktc10 小时前
Spring Security 官网文档学习
java·学习·spring
dvjr cloi10 小时前
Spring Framework 中文官方文档
java·后端·spring