news 2026/8/2 4:20:59

Spring Bean 的生命周期到底是什么?

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Spring Bean 的生命周期到底是什么?

Bean 的生命周期,指的是一个对象在 Spring 容器中,从创建、初始化,到被使用,再到最终销毁所经历的完整过程。

这道题是面试高频题,但很多人备考时习惯去网上找帖子背图。

其实不需要死记硬背,把核心阶段理解透,自然能用自己的话讲清楚。

BeanFactory 接口的源码注释中明确说明,它的实现类应当支持标准的 Bean 生命周期接口,并给出了标准初始化方法及其顺序。

一、源码入口:从 refresh 到 doCreateBean

refresh()流程中,Bean 的创建最终会进入finishBeanFactoryInitialization()

这里会遍历容器中所有需要初始化的 Bean(Bean 名先被收集进beanNames集合),并依次调用getBean()完成实例化。

getBean()内部继续进入doGetBean()

当缓存中不存在目标 Bean 时,会进一步调用createBean(),最终来到真正负责创建对象的doCreateBean()

Spring 源码中很多以 do 开头的方法承担核心执行逻辑,分析源码时通常需要重点关注。

二、实例化:靠反射生成对象

createBeanInstance()的职责就是完成 Bean 实例化。

Spring 底层仍然采用 Java 反射创建对象,本质流程与手写反射一致:

先获取Class对象,再获取构造器,最后通过反射调用构造方法生成实例。

实际代码中多数是无参构造,因此会通过getDeclaredConstructor()获取无参构造器,再交由BeanUtils工具类调用ctor.newInstance()完成实例化。

三、填充属性:populateBean

实例化完成后进入populateBean(),负责为 Bean 注入依赖和属性值。

属性注入完成后,Bean 还不能立即对外提供服务。

接下来进入初始化阶段,这也是 Bean 生命周期最重要的一部分。

四、初始化:Aware、后置处理器与初始化方法

初始化阶段首先处理各种 Aware 接口,例如BeanNameAwareBeanFactoryAware等。

Spring 会把容器相关信息注入 Bean,使其能够感知自身所处的运行环境。

随后执行BeanPostProcessor的前置方法postProcessBeforeInitialization()

之后进入初始化方法:

  • 如果 Bean 实现了InitializingBean接口,会调用afterPropertiesSet()。Bean 的创建全程由容器完成,若需要在属性装配完成后执行收尾逻辑,afterPropertiesSet()是常用的扩展点。
  • 如果配置中指定了init-method,会执行对应的自定义初始化方法,不过这种方式相对少用。

最后执行BeanPostProcessor的后置方法postProcessAfterInitialization()

如果 Bean 需要增强,例如使用 AOP,这一步会返回代理对象,而不是最初创建的原始对象。

初始化方式使用方式推荐程度
InitializingBean实现接口,重写afterPropertiesSet()常用扩展点,属性装配后的收尾机会
init-method配置中指定自定义方法名相对少用

后置方法执行完毕,Bean 的创建流程就全部完成。

五、使用与销毁

初始化完成后,Bean 即可对外提供服务,通过getBean()获取使用。

容器关闭时,Bean 进入销毁阶段,销毁方式与初始化对应:

  • 如果 Bean 实现了DisposableBean接口,会调用destroy()方法,释放资源一类的收尾逻辑通常放在这里。
  • 如果配置中指定了destroy-method,会执行对应的自定义销毁方法,同样相对少用。

需要注意的是,容器只负责单例 Bean 的销毁,prototype 作用域的 Bean 交出实例后便不再归容器管理。


整个 Bean 生命周期可以归纳为下面八个阶段:

实例化(反射生成对象)→ 填充属性 → 调用 Aware 接口 → 执行 BeanPostProcessor 前置 → 初始化(afterPropertiesSet / init-method)→ 执行 BeanPostProcessor 后置(AOP 代理通常在此阶段生成)→ 使用 → 销毁。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/2 4:14:07

3分钟完成Blender 3MF插件安装:彻底告别STL格式局限

3分钟完成Blender 3MF插件安装:彻底告别STL格式局限 【免费下载链接】Blender3mfFormat Blender add-on to import/export 3MF files 项目地址: https://gitcode.com/gh_mirrors/bl/Blender3mfFormat 还在为Blender无法直接支持3D打印专用格式而烦恼吗&#…

作者头像 李华
网站建设 2026/8/2 4:12:50

如何快速上手DeepSeek-Coder-V2:AI编程助手的完整指南

如何快速上手DeepSeek-Coder-V2:AI编程助手的完整指南 【免费下载链接】DeepSeek-Coder-V2 DeepSeek-Coder-V2: Breaking the Barrier of Closed-Source Models in Code Intelligence 项目地址: https://gitcode.com/GitHub_Trending/de/DeepSeek-Coder-V2 D…

作者头像 李华
网站建设 2026/8/2 4:10:40

基于Hailo-8L与RK3588的边缘AI部署:YOLOv8姿态估计实战

1. 项目缘起:为什么要在边缘设备上跑姿态估计?最近在折腾一个智能安防的POC项目,客户提了个挺有意思的需求:他们想在工厂的特定区域部署摄像头,实时监测工人的作业姿态,比如是否违规攀爬、弯腰角度是否过大…

作者头像 李华