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. 销毁阶段:执行销毁逻辑→资源回收
相关推荐
星辰_mya2 小时前
Spring Cloud服务熔断与降级
后端·spring·spring cloud
海兰3 小时前
使用 Spring AI 打造企业级 RAG 知识库第一部分:核心基础
java·人工智能·spring
神の愛3 小时前
mybatis什么时候不走 缓存??
spring·缓存·mybatis
tryxr3 小时前
SpringMVC 中的常用注解和用法
spring·mvc·springmvc
我是大猴子15 小时前
Spring代理类为何依赖注入失效?
java·后端·spring
Java成神之路-17 小时前
通俗易懂理解 Spring MVC 拦截器:概念、流程与简单实现(Spring系列16)
java·spring·mvc
小旭952719 小时前
Spring Security 实现权限控制(认证 + 授权全流程)
java·后端·spring
海兰21 小时前
使用 Spring AI 打造企业级 RAG 知识库第二部分:AI 实战
java·人工智能·spring