通俗易懂的讲解Spring容器启动执行流程

📕我是廖志伟,一名Java开发工程师、《Java项目实战——深入理解大型互联网企业通用技术》(基础篇)、(进阶篇)、(架构篇)清华大学出版社签约作家、Java领域优质创作者、优快云博客专家、阿里云专家博主、51CTO专家博主、产品软文专业写手、技术文章评审老师、技术类问卷调查设计师、幕后大佬社区创始人、开源项目贡献者。

📘拥有多年一线研发和团队管理经验,研究过主流框架的底层源码(Spring、SpringBoot、SpringMVC、SpringCloud、Mybatis、Dubbo、Zookeeper),消息中间件底层架构原理(RabbitMQ、RocketMQ、Kafka)、Redis缓存、MySQL关系型数据库、 ElasticSearch全文搜索、MongoDB非关系型数据库、Apache ShardingSphere分库分表读写分离、设计模式、领域驱动DDD、Kubernetes容器编排等。不定期分享高并发、高可用、高性能、微服务、分布式、海量数据、性能调优、云原生、项目管理、产品思维、技术选型、架构设计、求职面试、副业思维、个人成长等内容。

Java程序员廖志伟

🌾阅读前,快速浏览目录和章节概览可帮助了解文章结构、内容和作者的重点。了解自己希望从中获得什么样的知识或经验是非常重要的。建议在阅读时做笔记、思考问题、自我提问,以加深理解和吸收知识。阅读结束后,反思和总结所学内容,并尝试应用到现实中,有助于深化理解和应用知识。与朋友或同事分享所读内容,讨论细节并获得反馈,也有助于加深对知识的理解和吸收。💡在这个美好的时刻,笔者不再啰嗦废话,现在毫不拖延地进入文章所要讨论的主题。接下来,我将为大家呈现正文内容。

优快云


Spring容器启动流程(故事化衔接版)‌

🎬 主线故事:Spring如何“造车”‌

假设Spring容器是一家‌智能汽车工厂‌,从设计到量产共分6幕,环环相扣,层层递进。

第1幕 📜 接收设计图(加载配置)‌

目标‌:明确要造哪些车(Bean)和零件(依赖)。

用户输入‌:通过XML/注解/配置类告诉Spring:“我要一辆电动车(UserService),需要电池(UserDao)和电机(OrderService)”。
工厂响应‌:Spring拿到“设计图”,但此时工厂还是空仓库,连生产线都没搭好。

衔接‌:设计图是起点,但光有图纸无法生产 → 下一步需要‌搭建生产线‌。

第2幕 🏗️ 搭建生产线(创建BeanFactory)‌

目标‌:准备基础生产设备。

核心设备‌:初始化BeanFactory(核心生产线),但此时生产线上没有零件图纸,也没有原料。
关键点‌:生产线支持按需生产,但具体生产什么还不知道。

衔接‌:生产线就绪 → 下一步需要‌解析设计图‌,明确生产细节。

第3幕 📄 拆解图纸→生成工艺卡(BeanDefinition)‌

目标‌:将设计图转化为可执行的生产指令。

工艺卡内容‌:每张工艺卡(BeanDefinition)记录:
零件名称(Bean ID)
材料规格(类名、作用域)
组装顺序(依赖关系)
示例‌:为“电动车(UserService)”生成工艺卡,标明需要“电池(UserDao)”和“电机(OrderService)”。

衔接‌:工艺卡是生产依据 → 但生产前允许‌临时修改设计‌(如更换电池型号)。

第4幕 ✏️ 设计优化(BeanFactoryPostProcessor)‌

目标‌:允许工程师在投产前修改工艺卡。

典型操作‌:
替换占位符:将“电池容量=${capacity}”改为“电池容量=100kW”。
动态增删零件:根据环境配置,移除燃油车工艺卡,只保留电动车。
意义‌:‌灵活性‌的关键!确保工艺卡适配实际需求。

PropertySourcesPlaceholderConfigurer:处理${}占位符
ConfigurationClassPostProcessor:解析@Configuration类

衔接‌:工艺卡最终确认 → 正式进入‌生产阶段‌。

第5幕 🚧 生产线轰鸣(实例化+依赖注入)‌

目标‌:按工艺卡生产零件,并组装成车。

造零件毛坯(实例化)‌

工厂根据工艺卡,用‌3D打印(反射)‌生产零件(如创建UserService对象)。
此时零件是“空壳”:电池未充电,电机未校准。

自动化组装(依赖注入)‌

智能机器人‌(Spring)将电池(UserDao)和电机(OrderService)‌精准安装‌到电动车(UserService)中。
彻底解决“零件去哪找、怎么装”的问题。

衔接‌:零件组装完成 → 但还需‌质量检测与功能升级‌。

第6幕 🔧 出厂前质检(BeanPostProcessor + 初始化)‌

目标‌:确保每辆车符合标准,并支持功能扩展。

预检(BeanPostProcessor前置处理)‌

统一加装GPS‌(AOP代理):为所有车增加定位功能(如日志监控),不改动原始设计。

首次点火(初始化方法)‌

执行@PostConstruct:启动电动车自检程序(如检查电池状态)。
调用init-method:激活电机,测试最高转速。

终检(BeanPostProcessor后置处理)‌

喷涂车漆‌(缓存增强):为热门车型(如商品服务)增加防刮涂层(缓存层)。

衔接‌:所有车辆通过质检 → 工厂正式‌交付使用‌。

大结局 🎉 4S店开业(容器就绪)‌

工厂通知‌:触发ContextRefreshedEvent事件,宣告“车辆已可销售”。
用户提车‌:通过getBean()从Spring容器“提车”,立即上路(执行业务逻辑)。

💡 困惑的点‌

为何需要BeanFactoryPostProcessor?‌

类比:汽车设计图批准后,临时发现电池供应商更换,需紧急修改工艺卡。

依赖注入 vs 普通赋值?‌

普通赋值:自己买电池,手动安装 → 易出错(型号不匹配)。
依赖注入:工厂根据工艺卡,自动配送并安装标准化电池。

AOP如何实现无侵入?‌

类比:给车装GPS不拆原零件 → Bean无需感知代理层。

优快云

📥博主的人生感悟和目标

Java程序员廖志伟

希望各位读者大大多多支持用心写文章的博主,现在时代变了,信息爆炸,酒香也怕巷子深,博主真的需要大家的帮助才能在这片海洋中继续发光发热,所以,赶紧动动你的小手,点波关注❤️,点波赞👍,点波收藏⭐,甚至点波评论✍️,都是对博主最好的支持和鼓励!

📙经过多年在优快云创作上千篇文章的经验积累,我已经拥有了不错的写作技巧。同时,我还与清华大学出版社签下了四本书籍的合约,并将陆续出版。这些书籍包括了基础篇进阶篇、架构篇的📌《Java项目实战—深入理解大型互联网企业通用技术》📌,以及📚《解密程序员的思维密码–沟通、演讲、思考的实践》📚。具体出版计划会根据实际情况进行调整,希望各位读者朋友能够多多支持!

🔔如果您需要转载或者搬运这篇文章的话,非常欢迎您私信我哦~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Java程序员廖志伟

赏我包辣条呗

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值