发布时间:2026/8/19 13:02:40
【Spring框架学习(七)】:Spring Boot自动配置原理 Spring框架学习系列《Spring框架学习一从设计思想到核心架构全面认识Spring》《Spring框架学习二IOC核心原理解析为什么Autowired可以自动注入》《Spring框架学习三Spring Bean生命周期详解》《Spring框架学习四Spring AOP动态代理实现原理》《Spring框架学习五Spring MVC请求处理流程解析》《Spring框架学习六Spring事务实现原理》《Spring框架学习七Spring Boot自动配置原理》《Spring框架学习八Spring源码整体流程总结》一、前言在前面的文章中我们学习了 Spring Framework 的核心能力IOC控制反转Bean生命周期对象创建流程AOP动态代理机制Spring MVC请求处理流程Spring事务声明式事务实现但是在实际企业开发中我们很少直接使用 Spring Framework。现在主流开发方式spring-boot-starter-web搭配SpringBootApplication一个简单的启动类SpringBootApplication public class Application { public static void main(String[] args){ SpringApplication.run( Application.class,args ); } }项目就可以直接运行。那么问题来了为什么引入一个依赖就能使用对应功能为什么不需要大量XML配置Spring Boot如何自动创建BeanSpringBootApplication到底做了什么这些问题的答案就是 Spring Boot 自动配置机制。二、为什么需要Spring Boot在 Spring Framework 时代创建一个项目通常需要大量配置。例如配置Spring容器bean iduserService classcom.demo.UserService/配置数据库bean iddataSource /bean配置MVCmvc:annotation-driven/问题配置复杂学习成本高项目搭建慢Spring Boot的目标快速创建生产级Spring应用。它主要解决1. 配置复杂问题通过自动配置。2. 依赖管理问题通过Starter。3. 项目部署问题通过内嵌服务器。例如Tomcat直接集成。三、Spring Boot核心特点Spring Boot主要有三个核心能力1. 自动配置根据项目环境自动创建Bean。例如引入spring-boot-starter-webSpring Boot自动创建Spring MVC环境配置DispatcherServlet配置Jackson启动Tomcat2. Starter机制解决依赖管理。例如以前使用Web功能需要几十个依赖。现在只需要dependency artifactId spring-boot-starter-web /artifactId /dependency3. 内嵌服务器传统安装Tomcat。Spring Boot直接启动。例如SpringApplication.run();启动Spring Boot Tomcat ↓ Web服务启动四、SpringBoot启动流程启动代码SpringApplication.run( Application.class,args );执行流程创建SpringApplication对象 ↓ 准备Environment ↓ 创建ApplicationContext ↓ 加载自动配置 ↓ 扫描Bean ↓ 刷新容器 ↓ 启动完成其中最核心就是自动配置加载。五、SpringBootApplication解析我们开发中只需要一个注解SpringBootApplication实际上它是三个注解组合SpringBootConfiguration EnableAutoConfiguration ComponentScan六、ComponentScan组件扫描作用扫描项目中的Bean。例如Service public class UserService{ }Spring启动时扫描com.demo ↓ UserService ↓ 注册Bean这个能力来自Spring IOC。七、SpringBootConfiguration本质就是Configuration表示这是一个配置类。例如Configuration public class AppConfig{ }Spring会读取里面的Bean定义。八、EnableAutoConfiguration核心原理三个注解中最重要的是EnableAutoConfiguration它开启自动配置。它内部包含Import( AutoConfigurationImportSelector.class )重点AutoConfigurationImportSelector它负责加载自动配置类。九、自动配置到底是什么简单理解Spring Boot提前写好了很多配置类。例如Web自动配置WebMvcAutoConfiguration数据库DataSourceAutoConfiguration事务TransactionAutoConfiguration这些配置类会根据项目环境决定是否加载。十、自动配置加载流程完整流程启动Spring Boot ↓ EnableAutoConfiguration ↓ AutoConfigurationImportSelector ↓ 读取配置文件 ↓ 加载自动配置类 ↓ 条件判断 ↓ 创建Bean十一、META-INF配置文件Spring Boot如何知道有哪些自动配置关键文件META-INF/spring.factories里面保存自动配置类。例如org.springframework.boot.autoconfigure.EnableAutoConfiguration \ DataSourceAutoConfiguration, \ WebMvcAutoConfigurationSpring启动时读取这个文件,然后加载对应配置。十二、Spring Boot 3之后的变化Spring Boot 2时代主要spring.factoriesSpring Boot 3开始改为META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports例如DataSourceAutoConfiguration WebMvcAutoConfiguration作用相同告诉Spring有哪些自动配置。十三、条件装配机制Spring Boot并不是无条件创建Bean。它会判断环境。例如Configuration ConditionalOnClass(DataSource.class) public class DataSourceAutoConfiguration{ }意思如果classpath存在DataSource才加载配置。常见条件注解ConditionalOnClass判断是否存在某个类。例如存在MyBatis才配置MyBatis。ConditionalOnBean判断是否已有某个Bean。ConditionalOnMissingBean如果不存在才创建默认Bean。例如Bean ConditionalOnMissingBean public UserService userService(){ return new UserService(); }如果用户自己定义不会覆盖。十四、Starter原理为什么引入一个starter,功能就出现例如spring-boot-starter-web它主要包含1. 依赖管理例如包含spring-web spring-webmvc jackson tomcat2. 自动配置引入依赖后classpath出现对应类。例如Tomcat存在。满足条件ConditionalOnClass自动配置生效。流程引入starter ↓ 依赖进入classpath ↓ 触发条件判断 ↓ 加载AutoConfiguration ↓ 创建Bean十五、Spring Boot如何启动Tomcat引入spring-boot-starter-web自动配置ServletWebServerFactoryAutoConfiguration创建TomcatServletWebServerFactory启动Spring Boot ↓ 创建Tomcat ↓ 注册DispatcherServlet ↓ Web服务启动十六、自定义Spring Boot Starter企业开发中也可以创建自己的Starter。例如公司统一日志组件。结构my-log-spring-boot-starter | |- 自动配置类 | |- AutoConfiguration.imports | |- 业务Bean使用dependency my-log-spring-boot-starter /dependency即可自动生效。十七、Spring Boot核心源码类重点关注作用核心类启动入口SpringApplication自动配置入口EnableAutoConfiguration配置加载AutoConfigurationImportSelector自动配置基类AutoConfiguration条件判断Condition容器刷新AbstractApplicationContext十八、Spring Boot自动配置完整流程整体流程启动项目 ↓ SpringBootApplication ↓ ComponentScan扫描Bean ↓ EnableAutoConfiguration ↓ 读取AutoConfiguration配置 ↓ 加载自动配置类 ↓ Condition条件判断 ↓ 创建Bean ↓ 应用启动完成十九、总结Spring Boot最大的价值就是在Spring基础上通过自动配置降低开发复杂度。它的核心机制Starter提供依赖 ↓ EnableAutoConfiguration开启自动配置 ↓ 读取AutoConfiguration ↓ 条件判断 ↓ 自动创建Bean理解 Spring Boot 自动配置之后就能真正理解为什么引入starter就能使用功能为什么Spring Boot不需要大量XML配置为什么一个SpringBootApplication就能启动项目为什么企业可以快速搭建后端服务下一篇文章《Spring框架学习八Spring源码整体流程总结》将对整个 Spring Framework 学习系列进行总结把 IOC、Bean、AOP、MVC、事务、Boot 自动配置串联起来形成完整的 Spring 源码知识体系。

相关新闻

2026/8/19 14:22:55

2026乐山危房鉴定检测怎么选?老旧房危房鉴定靠谱机构 TOP 结构安全检测+ 报告可查 电话汇总

乐山老旧房屋与自建房数量众多,危房鉴定机构虽鳞次栉比,却难免鱼龙混杂。不少老旧小区业主、乡镇自建房住户、商铺经营者乃至园区厂房与学校医院,都亟需一份权威可靠的危房安全评估报告。市面上部分无资质机构出具的鉴定文件往往无法通过住建…

2026/8/19 14:22:55

第72篇 NumPy进阶:用Python算机器人运动学,比Eigen还直观

上篇NumPy入门把基础打好了。今天用NumPy来做机器人运动学的计算——旋转矩阵、齐次变换、正运动学。之前我们用Eigen做过同样的事。对比一下很有意思:Eigen是C的静态类型世界,NumPy是Python的动态类型世界。两者做的事情一样,但使用体验完全…

2026/8/19 14:22:55

从零到一读懂 Vue 3 中文文档:新手完整避坑阅读指南

从零到一读懂 Vue 3 中文文档:新手完整避坑阅读指南 【免费下载链接】docs-next-zh-cn :cn: Chinese translation for v3.vuejs.org 项目地址: https://gitcode.com/gh_mirrors/do/docs-next-zh-cn 深夜十一点,你刚敲完 npm create vite&#xff…

2026/8/19 14:17:52

基于RP2040与WS2812B的智能可穿戴灯光饰品设计与实现

1. 项目缘起与核心思路每年3月14日,对于技术爱好者和极客们来说,除了是圆周率日,更像是一个心照不宣的“硬件狂欢节”。去年这个时候,我看着手边几颗闲置的RP2040微控制器,琢磨着怎么才能让这个日子过得更有“仪式感”…

2026/8/19 4:14:28

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

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

2026/8/18 6:58:27

工业传感器与变送器详解:序章 从物理世界到工业数据

序章 从物理世界到工业数据 ——重新认识工业传感器与变送器 工业自动化系统正变得日益复杂。今天的工业现场早已不是简单的控制回路,而是由多层技术共同构成的立体体系:PLC、DCS、SCADA、MES、工业互联网、边缘计算与人工智能。控制系统可以执行复杂算法,工业网络可以实现…

2026/8/19 0:00:35

【单片机课程设计/毕业设计】基于 STM32 与 WiFi 模块的室内通风智能管控系统设计 基于 STM32 的人体存在感知自适应风扇控制系统设计(018503)

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

2026/8/19 0:00:35

AI如何驱动数学猜想生成:从大语言模型到自动化数学发现

1. 项目概述:当AI开始“猜”数学定理 最近在AI研究圈里,一个名为“Moonshine”的项目引起了不小的讨论。这名字本身就挺有意思,直译是“月光”,但在数学史上,它特指一个神秘而美丽的联系——魔群月光猜想,连…

2026/8/19 0:00:36

Agentic Web:构建智能体原生网络的基础设施挑战与四大支柱

1. 从“被动网络”到“能动网络”:一个正在发生的范式转移 如果你最近关注AI和Web技术的前沿动态,可能会频繁听到“Agentic Web”这个词。它不像“Web3”那样带着浓厚的金融色彩,也不像“元宇宙”那样充满科幻感,但它所描绘的未来…

2026/8/18 18:23:10

实测才敢推 AI论文网站 2026最新测评与推荐

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。一、综…

2026/8/19 4:14:38

2026必备!AI论文网站测评:最新推荐与深度对比

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

2026/8/18 7:12:40

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…