Spring Bean:生命周期全景深度分析 / Spring 容器管理对象(Bean)
Bean 就是被 Spring IoC 容器统一创建、管理、赋值、初始化、销毁的 Java 对象。Spring IoC 容器核心职责是统一管理 Bean 对象从对象创建、依赖注入、初始化、业务使用到最终资源销毁的整套流程即为Bean 生命周期。本文结合执行顺序、实现方式、作用域差异、面试考点以多表格结构化全景拆解覆盖简化流程、完整细粒度流程、初始化 / 销毁实现方案、单多例生命周期区别、高频实操案例。普通 new 对象程序员自己new自己管生命周期Spring 不管。Spring Bean 对象程序员只负责定义类全权交给 Spring 容器托管从创建、赋值、初始化到销毁全自动化。一、Bean 生命周期两大版本总览表 1极简五阶段流程文档基础版图片中展示的简化流程适合入门记忆仅划分 5 个核心大阶段序号阶段名称核心行为通俗类比1实例化Spring 调用构造方法新建空对象属性未赋值造出空水杯2属性赋值依赖注入自动装配 Autowired、setter、构造依赖填充对象字段给水杯加水、茶叶3初始化所有依赖注入完成执行自定义初始化逻辑烧水、调试水温4使用Bean 完全就绪业务代码调用执行业务逻辑喝水、正常使用5销毁IoC 容器关闭时执行资源释放清理逻辑倒掉水、清洗杯子收纳表 2完整细粒度标准执行流程面试完整版简化 5 阶段内部包含 Spring 内置感知接口、三级初始化 / 销毁方法完整执行顺序不可颠倒全流程共 8 大细分步骤步骤阶段细分执行内容关键接口 / 注解1实例化 Bean调用无参 / 有参构造器创建原始对象构造函数2属性填充 DI自动注入所有依赖、字段赋值Autowired、setter 注入、构造注入3Aware 接口回调Bean 获取 Spring 容器内部资源BeanNameAware、BeanFactoryAware、ApplicationContextAware4JSR250 初始化注解依赖注入完成后执行初始化逻辑PostConstruct5初始化接口回调Spring 内置初始化标准接口InitializingBean#afterPropertiesSet()6自定义 init 方法XML / Bean 指定自定义初始化函数Bean(initMethod xxx)7Bean 就绪使用交给业务层调用执行业务业务自动注入使用8容器关闭销毁流程容器 close () 时执行三级销毁逻辑PreDestroy → DisposableBean → Bean(destroyMethod)二、自定义初始化与销毁全方案对比Spring 提供三套独立方式实现初始化、销毁逻辑三套可同时共存执行顺序固定下面两张表格分别对比初始化、销毁方案。表 3三种初始化方式对比实现方式规范来源执行优先级优点缺点适用场景PostConstruct 注解JSR-250 Java 官方规范1最先执行注解简洁、无框架侵入、推荐首选JDK9 需引入 jakarta 依赖绝大多数项目初始化加载配置、创建连接InitializingBean 接口Spring 原生接口2中间执行无需额外配置容器自动识别强耦合 Spring 框架底层框架自定义 Bean 拓展initMethod 自定义方法XML / Bean 配置3最后执行完全解耦框架原有旧项目兼容需要手动配置方法名繁琐第三方无源码类、老旧 XML 项目表 4三种销毁方式对比实现方式规范来源执行优先级生效前提适用场景PreDestroy 注解JSR-250 规范1最先执行仅单例 Bean 生效日常业务释放线程池、数据库连接DisposableBean 接口Spring 原生接口2中间执行仅单例 Bean 生效中间件底层资源回收destroyMethod 自定义销毁XML/Bean 配置3最后执行仅单例 Bean 生效第三方工具类关闭资源补充核心规则三套初始化同时存在PostConstruct InitializingBean initMethod三套销毁同时存在PreDestroy DisposableBean destroyMethod三、Scope 作用域对生命周期的影响核心难点Bean 的作用域直接决定实例创建时机、销毁逻辑是否触发最常用 singleton单例、prototype多例差异巨大。表 5单例 vs 多例 Bean 生命周期差异对比维度singleton 单例默认prototype 多例实例创建时机容器启动时提前实例化懒加载 lazy-init 除外每次 Autowired /getBean () 获取时才新建对象实例数量全局容器仅 1 个对象每次获取全新独立对象完整生命周期管控Spring 全程管理实例化→注入→初始化→销毁Spring 只管理前 3 步实例、注入、初始化销毁方法触发容器关闭时自动执行 PreDestroy 等销毁逻辑容器不管理销毁销毁方法永远不会执行资源风险单例共享注意线程安全多对象频繁创建容易内存溢出适用场景工具类、Service、Mapper、连接池有状态对象每次调用独立数据四、完整代码演示可直接运行import jakarta.annotation.PostConstruct; import jakarta.annotation.PreDestroy; import org.springframework.beans.factory.DisposableBean; import org.springframework.beans.factory.InitializingBean; import org.springframework.stereotype.Component; Component public class LifeCycleDemo implements InitializingBean, DisposableBean { // 1.实例化构造方法 public LifeCycleDemo() { System.out.println(步骤1执行构造方法实例化Bean); } // 2.依赖注入模拟属性赋值 public void setMsg(String msg) { System.out.println(步骤2完成属性依赖注入赋值); } // 方式1JSR250初始化注解 优先级最高 PostConstruct public void postConstructInit() { System.out.println(步骤4PostConstruct 初始化方法执行); } // 方式2Spring初始化接口 InitializingBean Override public void afterPropertiesSet() throws Exception { System.out.println(步骤5InitializingBean afterPropertiesSet 执行); } // 方式3自定义init方法配合Bean(initMethod)使用 public void customInit() { System.out.println(步骤6自定义initMethod初始化方法); } // 业务使用方法 public void serviceWork() { System.out.println(步骤7Bean就绪执行业务逻辑); } // 方式1JSR250销毁注解 优先级最高 PreDestroy public void preDestroyClear() { System.out.println(销毁1PreDestroy 资源清理); } // 方式2Spring销毁接口 DisposableBean Override public void destroy() throws Exception { System.out.println(销毁2DisposableBean destroy 执行); } // 方式3自定义销毁方法配合Bean(destroyMethod) public void customDestroy() { System.out.println(销毁3自定义destroyMethod执行); } }五、高频业务使用场景汇总表表 6生命周期回调业务落地场景回调类型典型业务场景PostConstruct 初始化项目启动加载本地配置文件、初始化 Redis 连接池、定时任务启动、缓存预热PreDestroy 销毁服务停机关闭数据库连接、停止定时线程池、释放文件 IO 流、清空本地缓存Aware 感知接口项目中动态获取容器上下文、读取配置文件、发布容器事件自定义 init/destroy第三方 SDK 初始化与关闭无法修改源码六、面试高频问答总结表表 7Bean 生命周期面试核心考点面试问题标准答案核心要点Bean 完整生命周期顺序实例化→DI 注入→Aware 回调→PostConstruct→InitializingBean→initMethod→使用→容器关闭三级销毁三种初始化执行顺序PostConstruct InitializingBean initMethodprototype 多例会执行销毁方法吗不会Spring 不管理多例 Bean 销毁PreDestroy 无效单例 Bean 何时创建默认容器启动创建加 Lazy 懒加载第一次使用才创建InitializingBean 和 PostConstruct 区别PostConstruct 是 Java 规范无框架耦合InitializingBean 是 Spring 原生接口耦合框架容器关闭如何触发销毁调用容器 close ()、SpringBoot 服务正常停机强制 kill 进程不会执行销毁方法七、全文总结1、基础简化生命周期分为实例化、属性赋值、初始化、使用、销毁5 大阶段便于快速记忆2、底层完整流程包含 Aware 感知接口、三级初始化、三级销毁执行顺序严格固定3、初始化 / 销毁各提供三种实现方案开发优先推荐PostConstruct、PreDestroy注解4、Bean 作用域 Scope 是生命周期关键分水岭单例完整管控销毁多例无销毁逻辑5、生命周期回调核心价值在 Bean 就绪 / 销毁节点自动管理资源替代手动创建、释放连接降低业务代码复杂度。

相关新闻

如何用嘎嘎降AI处理哲学论文:哲学毕业论文降AI免费4.8元知网达标完整操作教程

如何用嘎嘎降AI处理哲学论文:哲学毕业论文降AI免费4.8元知网达标完整操作教程

如何用嘎嘎降AI处理哲学论文:哲学毕业论文降AI免费4.8元知网达标完整操作教程 第一次用降AI工具有很多不确定——传什么格式、选哪个模式、怎么验收。 这篇教程把哲学论文降AI教程的常见问题都覆盖了,主要基于嘎嘎降AI(www.aigcleaner.com&…

2026/10/14 22:11:37 阅读更多 →
基于 STM32 的便携式脉搏波传导速度 (PWV) 测量仪设计与实现

基于 STM32 的便携式脉搏波传导速度 (PWV) 测量仪设计与实现

一、项目概述 脉搏波传导速度(Pulse Wave Velocity, PWV)是评估动脉僵硬度的核心指标,与心血管疾病风险高度相关。本设计以 STM32 为主控,采用双通道光电式脉搏传感器同步采集人体两处脉搏信号,通过计算脉搏波到达时间差与传导距离的比值得到 PWV 值,整机便携、低功耗、…

2026/10/10 13:47:15 阅读更多 →
代码大模型微调、部署与应用实战——以Qwen与DeepSeek为例

代码大模型微调、部署与应用实战——以Qwen与DeepSeek为例

代码大模型微调、部署与应用实战——以Qwen与DeepSeek为例 一、引言 2026年,大语言模型(LLM)已从“能不能用”迈入“好不好用”的工程化阶段。在代码生成领域,以阿里通义千问Qwen系列和深度求索DeepSeek系列为代表的国产开源模型&…

2026/10/9 1:36:58 阅读更多 →

最新新闻

TCP粘包与半包问题的三种生产级解决方案

TCP粘包与半包问题的三种生产级解决方案

1. 项目概述:为什么“粘包”和“半包”是网络编程里最常被低估的坑你写完一个TCP服务端,本地测试一切正常,一上测试环境就发现客户端收不到完整消息,或者一条消息被拆成两段、三段,甚至几条消息黏在一起发过来——日志…

2026/10/14 22:12:34 阅读更多 →
AB实验中的新奇效应与改变厌恶:识别与规避指南

AB实验中的新奇效应与改变厌恶:识别与规避指南

做实验的人最怕的不是“没效果”,而是“看起来有效果,推全之后又没了”。我见过太多团队兴冲冲把新版全量上线,一周后核心指标跌回老版水平,甚至更差。复盘时发现,问题往往不在方案本身,而在两个非常隐蔽的…

2026/10/14 22:12:34 阅读更多 →
重复ACK与RACK:传输层丢包检测机制配合与调优实战

重复ACK与RACK:传输层丢包检测机制配合与调优实战

1. 从一个让人抓狂的传输现象说起做网络协议调优的人,几乎都遇到过这样一种场景:明明链路带宽没跑满,发送端却像被踩了刹车一样,速度死活上不去;抓包一看,满屏都是重复ACK,偶尔还夹杂着几个RACK…

2026/10/14 22:12:34 阅读更多 →
AB实验中的两大隐形杀手:新奇效应与改变厌恶解析

AB实验中的两大隐形杀手:新奇效应与改变厌恶解析

做实验做得久了,难免会遇上一些“打脸”时刻。明明上线前评估时觉得十拿九稳的改动,实验结果却给你当头一棒;更常见的是,同一个改动,月初开实验效果正向显著,月底再开一次却变成了负向甚至不显著。这时候很…

2026/10/14 22:12:34 阅读更多 →
AI原生应用隐私保护实战:从数据收集到模型遗忘的完整链路

AI原生应用隐私保护实战:从数据收集到模型遗忘的完整链路

去年底我们团队扎扎实实做了一轮数据安全改造,起因很简单:一个AI原生的智能助手在灰度期间,被安全团队发现输入日志里完整记录了用户的身份证号。这是我第一次真正意识到,AI原生应用的隐私保护和传统App完全是两码事——传统App把…

2026/10/14 22:12:34 阅读更多 →
中美AI差距从15%降到3%?别被基准测试分数骗了

中美AI差距从15%降到3%?别被基准测试分数骗了

1. 那个3%到底在说什么第一次看到“中美AI差距从15%降到3%”这个说法,我的反应和大多数人一样:要么是标题党,要么是某个机构为了流量硬造出来的数字。但仔细扒了一圈之后发现,这个数字确实有出处,也确实有人在认真算&a…

2026/10/14 22:11:32 阅读更多 →

日新闻

AnyPS5通用适配层设计:兼容性与性能的工程取舍

AnyPS5通用适配层设计:兼容性与性能的工程取舍

1. 从"AnyPS5"这个名字说起:它到底想解决什么问题第一次看到"AnyPS5"这个标题,我脑子里冒出来的第一个念头是:这大概率是一个围绕"跨平台运行"或者"通用适配"做文章的项目。名字里的"Any"…

2026/10/14 0:00:41 阅读更多 →
Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

1. 项目概述:Flutter跨平台二手交易应用开发作为一名长期从事移动应用开发的工程师,我最近完成了一个基于Flutter框架的二手物品交易平台项目。这个项目最吸引我的地方在于它完美结合了Flutter的跨平台优势与HarmonyOS的生态特性,实现了"…

2026/10/14 0:00:41 阅读更多 →
DFS算法解决飞机降落调度问题实战

DFS算法解决飞机降落调度问题实战

1. 项目背景与核心思路飞机降落问题是一个经典的调度优化场景,也是算法竞赛和面试中的高频题目。这个题目要求我们合理安排多架飞机的降落顺序和时间,确保所有飞机都能安全着陆而不发生冲突。在实际航空管制中,这类问题直接关系到飞行安全和机…

2026/10/14 0:00:41 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/14 16:30:29 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

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

2026/10/13 22:01:27 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

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

2026/10/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

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

2026/10/14 7:53:34 阅读更多 →