Spring Bean 的生命周期到底是什么? Bean 的生命周期指的是一个对象在 Spring 容器中从创建、初始化到被使用再到最终销毁所经历的完整过程。这道题是面试高频题但很多人备考时习惯去网上找帖子背图。其实不需要死记硬背把核心阶段理解透自然能用自己的话讲清楚。BeanFactory 接口的源码注释中明确说明它的实现类应当支持标准的 Bean 生命周期接口并给出了标准初始化方法及其顺序。一、源码入口从 refresh 到 doCreateBean在refresh()流程中Bean 的创建最终会进入finishBeanFactoryInitialization()。这里会遍历容器中所有需要初始化的 BeanBean 名先被收集进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 接口例如BeanNameAware、BeanFactoryAware等。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 代理通常在此阶段生成→ 使用 → 销毁。

相关新闻

最新新闻

SerenityOS 命令行选项解析指南:getopt 与 getopt_long 用法、返回值与底层实现

SerenityOS 命令行选项解析指南:getopt 与 getopt_long 用法、返回值与底层实现

SerenityOS 命令行选项解析指南:getopt 与 getopt_long 用法、返回值与底层实现 【免费下载链接】serenity The Serenity Operating System 🐞 项目地址: https://gitcode.com/GitHub_Trending/se/serenity 导读 本文以 getopt(3) 手册 为核心&a…

2026/10/1 19:32:24
轻量服务器还是ECS?大促云服务器选购与避坑实战指南

轻量服务器还是ECS?大促云服务器选购与避坑实战指南

每年大促节点,群里永远有人在问同一个问题:“38元的轻量服务器到底怎么抢?为什么我每次点进去都是已售罄?68元直购和99元的ECS我到底选哪个?”作为一个常年帮团队和自己采购云服务器的老用户,我太清楚这种纠…

2026/9/30 21:32:07
为 AI 代理的 Review 动作编写 Cedar 审批门控策略:review-agent-governance 策略编写实战指南

为 AI 代理的 Review 动作编写 Cedar 审批门控策略:review-agent-governance 策略编写实战指南

为 AI 代理的 Review 动作编写 Cedar 审批门控策略:review-agent-governance 策略编写实战指南 【免费下载链接】agents Multi-harness agentic plugin marketplace for Claude Code, Codex, Cursor, OpenCode, GitHub Copilot, and Google Antigravity 项目地址:…

2026/10/2 15:29:32
PaddleOCR 手写数学公式识别算法 CAN 实战指南:Counting-Aware Network 训练、评估与推理部署

PaddleOCR 手写数学公式识别算法 CAN 实战指南:Counting-Aware Network 训练、评估与推理部署

PaddleOCR 手写数学公式识别算法 CAN 实战指南:Counting-Aware Network 训练、评估与推理部署 【免费下载链接】PaddleOCR Turn any PDF or image document into structured data for your AI. A powerful, lightweight OCR toolkit that bridges the gap between i…

2026/10/1 19:32:23
Spring源码解析:构造器注入的类型转换与候选匹配机制

Spring源码解析:构造器注入的类型转换与候选匹配机制

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/1 19:32:35
openai-agents-python 多模型接入指南:深入解析 AnyLLMModel 适配层与 any-llm 路由

openai-agents-python 多模型接入指南:深入解析 AnyLLMModel 适配层与 any-llm 路由

openai-agents-python 多模型接入指南:深入解析 AnyLLMModel 适配层与 any-llm 路由 【免费下载链接】openai-agents-python A lightweight, powerful framework for multi-agent workflows 项目地址: https://gitcode.com/GitHub_Trending/op/openai-agents-pyth…

2026/9/30 21:32:11

日新闻

周新闻

月新闻