当前位置: 首页 > news >正文

Spring Boot 自动装配原理(面试版 + 实战理解版)

一、前言

在使用 Spring Boot 时,我们几乎不需要写配置:

  • 引入 Redis → 自动能用
  • 引入 MySQL → 自动连接
  • 引入 Web → 自动启动 Tomcat

很多人会问:

❓ Spring Boot 是怎么做到“自动”的?

这篇文章帮你彻底搞清:

自动装配是怎么工作的(不讲复杂源码,只讲能用的认知)

二、一句话核心

Spring Boot 自动装配 = 帮你自动加载一堆配置类

三、整体流程(必须背下来)

Spring Boot 启动时做了这几步:

启动应用 ↓ @EnableAutoConfiguration ↓ 加载自动配置类(spring.factories / AutoConfiguration.imports) ↓ 条件判断(@ConditionalOnClass 等) ↓ 满足条件 → 加载 Bean

四、核心入口:@EnableAutoConfiguration

你项目里其实已经有:

@SpringBootApplication

它内部包含:

@EnableAutoConfiguration

👉 这就是自动装配的开关

五、自动配置类从哪里来?

Spring Boot 会去找:

META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports

(旧版本是spring.factories

里面是这样的:

org.springframework.boot.autoconfigure.redis.RedisAutoConfiguration
org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration

👉 这些就是“候选配置类”

六、核心机制:条件判断(重点)

不是所有配置都会加载!

会经过一层过滤:

常见条件注解

注解作用
@ConditionalOnClass类存在才加载
@ConditionalOnMissingBean没有Bean才创建
@ConditionalOnProperty配置项满足才加载

举例(Redis 自动配置)

@ConditionalOnClass(RedisTemplate.class) public class RedisAutoConfiguration { }
👉 含义:
  • 引入 Redis 依赖 → 生效
  • 没引 → 跳过

七、完整流程(你要能讲出来)

1. 启动 Spring Boot 2. 扫描 AutoConfiguration.imports 3. 拿到一堆自动配置类 4. 一个个判断条件(Conditional) 5. 满足 → 加载Bean 6. 不满足 → 跳过

八、你怎么验证它在工作?(实战)


✅ 方法1:打开调试日志

yaml

debug: true

启动时会看到:

CONDITIONS EVALUATION REPORT

Positive matches:
RedisAutoConfiguration matched


👉 这就是自动装配在“做判断”

✅ 方法2:自己写一个自动配置(最小Demo)

@Configuration @ConditionalOnClass(name = "java.util.ArrayList") public class MyAutoConfig { @Bean public String testBean() { System.out.println(">>> 自动配置生效"); return "ok"; } }

👉 启动就会打印:>>> 自动配置生效

九、和你 Android 经验对齐(重点)


🔶 Android

if (hasFeature) { initService(); }

🔶 Spring Boot

@ConditionalOnClass @Bean initService()

👉 本质一样:

环境决定功能是否启用


十、面试怎么讲?(直接给你话术)


🎯 标准回答(中级)

Spring Boot 自动装配的核心是 @EnableAutoConfiguration。
启动时会加载 AutoConfiguration.imports 中的配置类。
然后通过 @Conditional 系列注解进行条件判断,
满足条件的配置类才会被加载成 Bean,从而实现自动配置。


🎯 加分点

你可以补一句:

比如 RedisAutoConfiguration 会通过 @ConditionalOnClass 判断 RedisTemplate 是否存在。

下一篇:

手写 Starter 进阶:@ConfigurationProperties 实战(支持 application.yml)

http://www.jsqmd.com/news/668812/

相关文章:

  • 老年人扎堆学AI,背后藏着千亿级银发经济新蓝海
  • 别再让Quartus默认的1GHz时钟坑了你!手把手教你为FPGA点灯工程写SDC约束文件
  • 通风系统节能改造笔记:用PLC分段控制替代PID,稳定风压还省电(含现场数据对比)
  • 【2026年最新600套毕设项目分享】微信小程序的小说实体书商城(30106)
  • RKNN模型在RK3588上初始化失败?别慌,可能是你的虚拟环境和开发板版本对不上
  • AI开发-python-langchain框架(--pdf文件分页加载 )
  • Polkadot 技术栈地图 2026
  • 【计算机网络 实验报告6】路由选择协议
  • 从H264到H266:视频编码的‘乐高’块是如何越变越小的?一个动画演示看懂核心差异
  • 千问模型本地部署
  • 万字长文爆肝:彻底弄懂Linux文件系统(Ext2),从Inode、Block到Dentry核心机制全解析
  • 贵阳求职市场大洗牌:为什么AI营销和顾问型销售正在成为新的职业风口? - 精选优质企业推荐官
  • YOLOv5-face:面向实时人脸检测的优化架构与应用实践
  • 企业 Bug 管理工具推荐:8款主流缺陷跟踪系统对比解读
  • Google BwA 杭州场(Gemma 4 专题全国首发)线下活动记录
  • 别再混淆了!YOLOv5/v8模型评估里mAP@0.5和mAP@0.5:0.95到底怎么看?
  • 【热门技术深度讨论】AI Agent 自进化框架革命:从静态配置到生物级进化
  • 10年老兵带你学Java(第3课):数组和方法 - 代码的复用
  • 贵阳找工作该看什么?一份2026年本地招聘市场完整观察指南 - 精选优质企业推荐官
  • Product Hunt 每日热榜 | 2026-04-19
  • HarmonyOS原子化服务:轻量化应用的未来形态
  • Windows 10系统清理终极指南:让旧电脑重获新生的免费神器
  • 面试官灵魂拷问:Linux软链接与硬链接到底有什么区别?(附底层Inode级深度图解)
  • RKMEDIA VO图层配置与双屏显示实战
  • C语言分支循环作业错题与心得
  • 如何学好C语言:从入门到精通,掌握编程基石
  • 我重新梳理了一遍 RAG,终于明白它不只是接个向量库
  • 为什么92%的AGI项目在记忆对齐阶段失败?——2026奇点大会实测数据揭示5大认知断层与3步修复协议(含开源Memory-LLM v0.9预览版)
  • zmq源码分析之io_thread_t
  • 贵阳伍子柒网络|贵阳本地企业专属GEO服务商,技术适配、效果可查、服务贴心