【Spring框架学习(三)】:Spring Bean生命周期源码解析
Spring框架学习系列《Spring框架学习一从设计思想到核心架构全面认识Spring》《Spring框架学习二IOC核心原理解析为什么Autowired可以自动注入》《Spring框架学习三Spring Bean生命周期详解》《Spring框架学习四Spring AOP动态代理实现原理》《Spring框架学习五Spring MVC请求处理流程解析》《Spring框架学习六Spring事务实现原理》《Spring框架学习七Spring Boot自动配置原理》《Spring框架学习八Spring源码整体流程总结》一、前言在上一篇文章中我们学习了 Spring IOC 的核心原理。我们知道Spring 会通过 IOC 容器管理对象。一个普通 Java 类Service public class UserService { }经过 Spring 管理后就成为了一个 Bean。但是一个问题随之而来Spring 中的 Bean 到底是如何创建出来的从类被扫描到对象被使用中间经历了哪些过程例如Autowired private UserDao userDao;为什么 Spring 可以自动完成注入例如PostConstruct public void init(){ }为什么这个方法会自动执行这些问题都和 Bean 生命周期有关。本文将从源码流程和实际开发角度分析 Spring Bean 从创建到销毁的完整过程。二、什么是Bean生命周期Bean生命周期指的是一个 Bean 从被 Spring 创建到最终销毁所经历的整个过程。简单流程BeanDefinition ↓ 实例化 ↓ 属性注入 ↓ 初始化 ↓ 使用 ↓ 销毁Spring 对 Bean 的管理本质就是对这个生命周期进行控制。三、Bean生命周期整体流程Spring Bean 完整生命周期1. 实例化 Bean ↓ 2. 属性填充 ↓ 3. Aware接口回调 ↓ 4. BeanPostProcessor前置处理 ↓ 5. 初始化方法执行 ↓ 6. BeanPostProcessor后置处理 ↓ 7. Bean投入使用 ↓ 8. Bean销毁其中最重要的几个阶段实例化依赖注入初始化后置处理器四、第一步实例化Bean4.1 什么是实例化实例化就是创建对象。例如Java中UserService userService new UserService();Spring底层也是类似过程。4.2 Spring源码入口Bean创建核心类AbstractAutowireCapableBeanFactory核心方法createBean()调用doCreateBean()流程createBean() ↓ doCreateBean() ↓ createBeanInstance() ↓ 反射创建对象最终Spring通过反射创建Bean实例。五、第二步属性注入对象创建完成后Spring需要给对象中的属性赋值。例如Service public class UserService { Autowired private UserDao userDao; }此时UserService已经创建。但是userDao还是空。Spring接下来进行属性填充。5.1 属性注入源码核心方法populateBean()作用填充 Bean 属性。其中InstantiationAwareBeanPostProcessor会参与处理。而AutowiredAnnotationBeanPostProcessor就是其中一个重要实现。5.2 Autowired执行过程流程创建UserService ↓ 发现Autowired ↓ 寻找UserDao Bean ↓ 反射赋值 ↓ 完成依赖注入最终效果userService.userDao userDao;六、第三步Aware接口回调Spring提供了一系列Aware接口。作用让 Bean 获取 Spring 容器中的一些信息。常见接口接口作用BeanNameAware获取Bean名称BeanFactoryAware获取BeanFactoryApplicationContextAware获取ApplicationContext例如Component public class MyBean implements ApplicationContextAware { private ApplicationContext context; Override public void setApplicationContext( ApplicationContext applicationContext){ this.context applicationContext; } }执行过程中Spring会主动调用setApplicationContext()把容器对象传入。七、第四步BeanPostProcessor前置处理BeanPostProcessor中文Bean后置处理器。它是 Spring 提供的重要扩展机制。接口public interface BeanPostProcessor { Object postProcessBeforeInitialization( Object bean, String beanName); }作用在 Bean 初始化之前执行。例如Spring AOP就是基于这个机制实现的。执行流程创建Bean ↓ 属性注入 ↓ BeanPostProcessor前置处理 ↓ 初始化八、第五步初始化Bean初始化阶段Spring会执行各种初始化方法。主要有三种方式。8.1 PostConstruct最常见方式。代码Component public class UserService { PostConstruct public void init(){ System.out.println( 初始化完成); } }Bean创建完成后自动执行。8.2 InitializingBean接口实现public interface InitializingBean { void afterPropertiesSet(); }例如Component public class UserService implements InitializingBean { Override public void afterPropertiesSet(){ System.out.println(初始化); } }8.3 init-method配置初始化方法。例如Bean(initMethodinit) public UserService userService(){ return new UserService(); }九、第六步BeanPostProcessor后置处理初始化完成后Spring再次调用postProcessAfterInitialization()流程初始化 ↓ BeanPostProcessor后置处理 ↓ 返回最终Bean为什么需要这一步因为很多 Spring 功能依赖它。例如AOP代理对象创建例如Transactional public void save(){ }Spring不会直接返回原对象。而是原始Bean ↓ AOP增强 ↓ 代理Bean所以我们最终拿到的对象可能不是原始对象。十、单例Bean如何保存Spring默认Bean作用域singleton。也就是一个容器只有一个对象。Spring通过DefaultSingletonBeanRegistry保存。核心singletonObjects结构MapString,Object例如userService ↓ UserService对象以后再次获取直接从缓存返回。十一、Bean销毁阶段当 Spring 容器关闭时Bean会进入销毁阶段。例如关闭context.close();Spring会执行销毁方法。11.1 PreDestroy常用方式Component public class UserService { PreDestroy public void destroy(){ System.out.println( Bean销毁); } }11.2 DisposableBean实现public interface DisposableBean{ void destroy(); }十二、完整生命周期总结Spring Bean完整流程BeanDefinition ↓ 实例化 ↓ 属性注入 ↓ Aware接口 ↓ BeanPostProcessor前置 ↓ 初始化方法 ↓ BeanPostProcessor后置 ↓ 生成最终Bean ↓ 对象使用 ↓ 销毁十三、Bean生命周期中的核心扩展点Spring为什么设计这么复杂因为它需要提供扩展能力。其中最重要的是BeanPostProcessor它允许开发者在 Bean 创建过程中插入自己的逻辑。例如AOP自动代理注解处理事务增强很多 Spring 高级功能都建立在这个机制之上。十四、总结Spring Bean 生命周期本质就是Spring 如何控制一个对象从出生到消失。核心过程创建对象 ↓ 注入依赖 ↓ 执行初始化 ↓ 增强处理 ↓ 投入使用 ↓ 销毁资源理解 Bean 生命周期后就能真正理解为什么Autowired可以自动注入为什么PostConstruct会自动执行为什么Transactional需要代理为什么Spring可以扩展各种功能下一篇文章将继续深入《Spring框架学习四Spring AOP动态代理实现原理》从代理对象创建、JDK动态代理、CGLIB代理三个方面分析 Spring 如何实现面向切面编程。

相关新闻

抖音批量下载终极指南:5分钟学会用 douyin-downloader 免费去水印保存视频

抖音批量下载终极指南:5分钟学会用 douyin-downloader 免费去水印保存视频

抖音批量下载终极指南:5分钟学会用 douyin-downloader 免费去水印保存视频 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and bro…

2026/8/18 23:50:13 阅读更多 →
手把手教你学 Simulink—— 高精度数控机床电主轴电机的失磁故障穿越控制仿真

手把手教你学 Simulink—— 高精度数控机床电主轴电机的失磁故障穿越控制仿真

目录 手把手教你学 Simulink —— 高精度数控机床电主轴电机的失磁故障穿越控制仿真 一、为什么“电主轴失磁”在高档数控里特别致命? 1.1 电主轴工况特征

2026/8/18 23:49:35 阅读更多 →
把电视盒子翻新成服务器:Amlogic Armbian 硬件适配保姆级闯关攻略

把电视盒子翻新成服务器:Amlogic Armbian 硬件适配保姆级闯关攻略

把电视盒子翻新成服务器:Amlogic Armbian 硬件适配保姆级闯关攻略 【免费下载链接】amlogic-s9xxx-armbian Supports running Armbian on Amlogic, Allwinner, and Rockchip devices. Support a311d, s922x, s905x3, s905x2, s912, s905d, s905x, s905w, s905, s905…

2026/8/17 21:20:26 阅读更多 →

最新新闻

构建智能体专用查询引擎:从意图理解到执行优化的实战指南

构建智能体专用查询引擎:从意图理解到执行优化的实战指南

1. 项目概述:为智能体构建一个专属的“搜索引擎” 最近在折腾各种AI智能体(Agents)项目,无论是基于LLM的自主智能体,还是多智能体协作框架,我发现一个共通的痛点越来越明显: 智能体“知道”的很…

2026/8/18 23:49:24 阅读更多 →
9款AI写论文哪个好?2026实测:只有它能做到“真文献+真图表”,毕业季不踩雷

9款AI写论文哪个好?2026实测:只有它能做到“真文献+真图表”,毕业季不踩雷

aigcbiye官网:http://www.aigcbiye.com | 微信公众号 搜一搜 aigcbiye 你打开一篇AI生成的论文初稿,第一章读下来逻辑通顺、辞藻华丽,翻到参考文献列表却傻了眼——作者名字是虚构的,期刊名查无此刊,DOI点…

2026/8/18 23:49:24 阅读更多 →
Spark Streaming 核心原理与应用实践:从微批处理到实时计算

Spark Streaming 核心原理与应用实践:从微批处理到实时计算

1. 项目概述:从批处理到实时计算的跨越 在数据处理的江湖里,Spark 的批处理能力早已名声在外,但面对源源不断、实时涌入的数据流,传统的批处理模式就显得有些力不从心了。想象一下,你是一家电商平台的运维,…

2026/8/18 23:49:24 阅读更多 →
单片机毕业设计-基于 STM32/51 单片机的可校准便携式计价电子秤开发 基于 STM32/51 单片机的多档位单价切换称重设备设计(021103)

单片机毕业设计-基于 STM32/51 单片机的可校准便携式计价电子秤开发 基于 STM32/51 单片机的多档位单价切换称重设备设计(021103)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于嵌入式单片机,Java、小程序技术领域和毕业项目实战 ✌️…

2026/8/18 23:49:24 阅读更多 →
单片机毕业设计-基于单片机的三通道红外传感器循迹小车硬件控制系统设计 基于 STM32 或 51 单片机的可充电式自主循迹智能小车开发(022203)

单片机毕业设计-基于单片机的三通道红外传感器循迹小车硬件控制系统设计 基于 STM32 或 51 单片机的可充电式自主循迹智能小车开发(022203)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于嵌入式单片机,Java、小程序技术领域和毕业项目实战 ✌️…

2026/8/18 23:49:23 阅读更多 →
指令微调如何影响大语言模型的置信度与词汇多样性?

指令微调如何影响大语言模型的置信度与词汇多样性?

在自然语言处理领域,大语言模型(LLM)的指令微调(Instruction Tuning)已成为提升模型与人类意图对齐能力的关键技术。然而,在追求模型“听话”的同时,我们是否无意中改变了模型回答问题的内在特质…

2026/8/18 23:48:23 阅读更多 →

日新闻

告别逐帧截图:用 extract-video-ppt 快速提取视频中的 PPT 并一键导出 PDF

告别逐帧截图:用 extract-video-ppt 快速提取视频中的 PPT 并一键导出 PDF

告别逐帧截图:用 extract-video-ppt 快速提取视频中的 PPT 并一键导出 PDF 【免费下载链接】extract-video-ppt extract the ppt in the video 项目地址: https://gitcode.com/gh_mirrors/ex/extract-video-ppt 如果你还停留在"看网课 不停暂停 截图 …

2026/8/18 0:00:57 阅读更多 →
思源宋体TTF一站式上手:7个字重免费商用,从下载到上线的完整走查

思源宋体TTF一站式上手:7个字重免费商用,从下载到上线的完整走查

思源宋体TTF一站式上手:7个字重免费商用,从下载到上线的完整走查 【免费下载链接】source-han-serif-ttf Source Han Serif TTF 项目地址: https://gitcode.com/gh_mirrors/so/source-han-serif-ttf 你是不是也经历过这种时刻:设计稿里…

2026/8/18 0:00:58 阅读更多 →
华硕笔记本控制权回收指南:GHelper 如何用一个 10MB 文件替代 Armoury Crate

华硕笔记本控制权回收指南:GHelper 如何用一个 10MB 文件替代 Armoury Crate

华硕笔记本控制权回收指南:GHelper 如何用一个 10MB 文件替代 Armoury Crate 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops with nearly the same functionality. Works with ROG Zephyrus, Flow, TUF, Strix, Scar, ProArt, …

2026/8/18 0:00:59 阅读更多 →

周新闻

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

如果你是一名开发者,最近可能已经感受到了AI大模型正在从“玩具”变成“生产力工具”的强烈信号。从代码补全到智能Agent,从本地部署到云端API,我们正处在一个技术栈快速重构的节点。然而,面对层出不穷的模型、框架和工具&#xf…

2026/8/18 9:15:35 阅读更多 →
工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

第四篇:反射——高频能量撞墙之后会发生什么? —— 你以为信号已经过去了,其实它正在回来打你 老Q的现场笔记 第五季,我们正式进入工业神经系统层。这里不再是单个设备的战斗,而是整个工厂“经脉”层面的秩序之战。从这一篇开始,你将第一次看清:看似简单的信号传播,背…

2026/8/18 9:06:28 阅读更多 →
【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…

2026/8/18 9:04:56 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/17 18:54:37 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/17 18:55:16 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/17 18:55:55 阅读更多 →