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

Spring自动配置分析

文章目录

  • 前言
    • 1. 入口:`@SpringBootApplication`
    • 2. 核心开关:`@EnableAutoConfiguration`
    • 3. 读取自动配置类列表
    • 4. 自动配置类本质是什么?
    • 5. 条件判断:为什么有些配置生效,有些不生效?
    • 6. 完整执行链路
    • 7. 举个例子:Redis 自动配置
    • 8. 怎么看哪些自动配置生效?
    • 9. 一句话总结

前言

下面按源码链路拆:

1. 入口:@SpringBootApplication

它本质是三个注解的组合:

@SpringBootConfiguration@EnableAutoConfiguration@ComponentScan

官方也明确说,@SpringBootApplication等价于启用配置类、自动配置、组件扫描。(Home)


2. 核心开关:@EnableAutoConfiguration

它的源码核心是:

@AutoConfigurationPackage@Import(AutoConfigurationImportSelector.class)public@interfaceEnableAutoConfiguration{}

关键在这一句:

@Import(AutoConfigurationImportSelector.class)

也就是说:

自动配置真正的入口是AutoConfigurationImportSelector

官方说明:自动配置会根据 classpath 和你已经定义的 Bean 来推测需要配置什么。(Home)


3. 读取自动配置类列表

Spring Boot 3.x 主要从这个文件读取:

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

里面类似:

org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration

官方文档也说明,自动配置类可以放在外部 jar 中,并通过META-INF/spring/*.imports被发现。(Home)


4. 自动配置类本质是什么?

自动配置类其实就是特殊的配置类:

@AutoConfiguration@ConditionalOnClass(DataSource.class)@EnableConfigurationProperties(DataSourceProperties.class)publicclassDataSourceAutoConfiguration{}

@AutoConfiguration本质接近:

@Configuration(proxyBeanMethods=false)

官方 API 说明:自动配置类是普通@Configuration,区别是proxyBeanMethods=false,并且通常配合@ConditionalOnClass@ConditionalOnMissingBean。(Home)


5. 条件判断:为什么有些配置生效,有些不生效?

核心靠一堆@Conditional...注解:

@ConditionalOnClass@ConditionalOnMissingBean@ConditionalOnBean@ConditionalOnProperty@ConditionalOnWebApplication

比如:

@Bean@ConditionalOnMissingBeanpublicObjectMapperobjectMapper(){returnnewObjectMapper();}

意思是:

如果你自己没有定义ObjectMapper,Spring Boot 才帮你创建一个。

所以自动配置的原则是:

你没配,我帮你配;你自己配了,我就让位。


6. 完整执行链路

SpringApplication.run()↓ 加载主启动类 ↓ 解析 @SpringBootApplication ↓ 发现 @EnableAutoConfiguration ↓ @Import(AutoConfigurationImportSelector.class)↓ 读取 AutoConfiguration.imports ↓ 拿到一批自动配置类 ↓ 按条件筛选 ↓ 把符合条件的配置类导入容器 ↓ 执行其中的 @Bean 方法 ↓ 生成 Bean

7. 举个例子:Redis 自动配置

你引入:

spring-boot-starter-data-redis

classpath 中出现 Redis 相关类。

Spring Boot 发现:

@ConditionalOnClass(RedisOperations.class)

成立。

然后检查:

@ConditionalOnMissingBean(RedisConnectionFactory.class)

如果你没自己定义,它就自动创建:

RedisConnectionFactoryRedisTemplateStringRedisTemplate

所以你才能直接:

@AutowiredprivateStringRedisTemplatestringRedisTemplate;

8. 怎么看哪些自动配置生效?

启动时加:

--debug

或者配置:

debug=true

会看到 Conditions Evaluation Report。

官方文档也建议通过--debug-Ddebug或 Actuator 的 conditions endpoint 查看哪些自动配置被打开。(Home)


9. 一句话总结

Spring Boot 自动配置 =@EnableAutoConfiguration通过AutoConfigurationImportSelector读取AutoConfiguration.imports中的配置类,再根据@Conditional条件决定哪些配置类和 Bean 真正生效。

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

相关文章:

  • 2026年优质竞价投放代运营服务商实力测评|自研技术与投放效果横向对比 - GEO优化
  • 新能源租车推荐:2026年在线库存、补能体验与车型丰富度深度解析 - 科技焦点
  • Figma中文界面终极指南:5分钟让Figma说中文的完整解决方案
  • ParsecVDisplay终极指南:构建高效虚拟显示驱动器的完整方案
  • Windows系统终极清理指南:用Dism++实现5倍性能提升
  • 降AI工具贵就是好?5招判断综合性价比让毕业生不交智商税! - 我要发一区
  • RAG评估全攻略:从检索指标到生产监控,一文说清楚
  • 2026年租车最便宜的公司怎么选?日租金起价、长租折扣与隐性费用全解析 - 科技焦点
  • Docker运行Stable Diffusion/LLaMA3/Phi-3的隔离水位线(GPU直通模式下显存隔离有效性实测):NVML API劫持风险首次量化披露
  • 高谱成像高光谱相机助力浙江大学团队在《Light: Science Applications》发表多维度伪装突破性成果
  • 腾讯混元翻译模型HY-MT1.5-1.8B:5分钟快速部署,支持38种语言
  • 手把手教你用VSCode搭建ASRPRO开发环境(含FreeRTOS线程配置避坑指南)
  • 新知网:商业世界的知识补给站 - 年度推荐企业名录
  • EvoRAG:知识图谱也学会了进化~
  • 5分钟掌握Translumo:Windows平台最强实时屏幕翻译工具终极指南
  • 性价比高的西藏旅游团推荐:2026年价格透明度与纯玩保障优选指南 - 科技焦点
  • 《打造高准确率QClaw知识库:从清洗到拆分的完整实操流程》
  • 在R语言的生态系统中,字符串处理一直是一个重要且复杂的任务
  • 手把手教你搭建RTK差分定位基站:从LC29H模块到NTRIP Caster数据上传
  • 从零基础到实战精通:2026年大模型系统学习路线指南
  • 【2026年最新】亲测好用的3个英文降ai率攻略(内含免费降ai方法) - 殷念写论文
  • 5个理由告诉你:为什么iwrqk是二次元爱好者必备的Flutter客户端
  • 告别炸机!用PX4 SITL在Gazebo里安全调试你的无人机代码(保姆级环境搭建)
  • CH58x蓝牙芯片DataFlash读写避坑指南:从Sector擦除到字节写入的实战心得
  • WeChatExporter:免费开源的微信聊天记录备份与隐私保护终极方案
  • 04-10-02 论题和结论 - 学习笔记
  • CompressO:3大核心功能助你轻松压缩视频图像,节省90%存储空间
  • 降AI率工具横评:免费试用/不达标退款/服务时长哪款综合性价比高? - 我要发一区
  • Agent群体智能来了!魔搭开源Agent自进化群体智能框架:群体记忆自动蒸馏与进化,8万+群体技能即取即用,智能体画像一键复用
  • 从Livox Viewer2到ROS:HAP激光雷达点云数据处理的进阶玩法(bag转pcd实战)