尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

SpringBoot 自动配置完整原理

SpringBoot 自动配置完整原理
📅 发布时间:2026/7/22 3:30:04

SpringBoot 自动配置核心目的是无需手动写大量 XML / @Bean 配置,根据项目依赖、类是否存在、容器有无 Bean,自动装配全套组件,整套机制依托三大核心:@EnableAutoConfiguration、AutoConfigurationImportSelector、META-INF/spring.factories、条件注解。我分四层讲清楚完整流程。

一、入口:@SpringBootApplication 复合注解

@SpringBootApplication = @Configuration + @ComponentScan + @EnableAutoConfiguration

自动配置开关来自@EnableAutoConfiguration,核心逻辑全在这个注解里。 点进源码:

@Import(AutoConfigurationImportSelector.class) public @interface EnableAutoConfiguration {}

@Import导入选择器类,这是自动配置的核心入口。

二、核心类:AutoConfigurationImportSelector(自动配置选择器)

它实现了DeferredImportSelector,Spring 扫描配置类时会执行selectImports()方法,核心做两件事:

  1. 读取所有 jar 包下资源文件:META-INF/spring.factories
  2. 在文件中查找 key =org.springframework.boot.autoconfigure.EnableAutoConfiguration对应的所有自动配置类全类名;

示例 spring.factories 片段:

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration,\ org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration,\ org.springframework.boot.autoconfigure.redis.RedisAutoConfiguration

SpringBoot 内置了上百个场景自动配置类,数据库、MVC、Redis、Tomcat 全部在这里定义。

三、条件注解:按需生效,避免无脑加载所有配置

拿到所有自动配置类后,不会全部直接加载,每个配置类头部都带条件注解,不满足条件直接跳过,这是 “自动” 的关键。

常用核心条件注解:

  1. @ConditionalOnClass:classpath 存在指定类才生效 例:RedisAutoConfiguration 要求存在RedisTemplate类,导入 spring-data-redis 依赖才会激活;
  2. @ConditionalOnMissingBean:容器中没有用户自定义 Bean,才自动创建 业务自己写了 DataSource,则 SpringBoot 不会自动装配默认数据源;
  3. @ConditionalOnProperty:配置文件存在对应配置项才开启;
  4. @ConditionalOnWebApplication:仅 web 环境生效(MVC 自动配置);

举个例子:WebMvcAutoConfiguration 只有项目引入 Servlet、Tomcat 依赖,满足@ConditionalOnClass(DispatcherServlet.class),才会自动装配视图解析器、静态资源映射、转换器等 MVC 组件。

四、自动配置类内部逻辑

每个 XXAutoConfiguration 都是标准@Configuration配置类,内部通过@Bean注册组件:

@Configuration @ConditionalOnClass(RedisTemplate.class) @ConditionalOnMissingBean(RedisTemplate.class) public class RedisAutoConfiguration { @Bean public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory factory) { // 提供默认RedisTemplate } }

流程:

  1. 引入 redis 依赖 → 存在 RedisTemplate 类;
  2. 业务没手动创建 RedisTemplate Bean;
  3. 自动配置生效,容器自动注入 RedisTemplate,直接 @Autowired 使用。

五、配置文件绑定:@EnableConfigurationProperties

自动配置类配合@EnableConfigurationProperties,把 application.yml/properties 配置映射到属性类:

@EnableConfigurationProperties(RedisProperties.class) public class RedisAutoConfiguration {}

RedisProperties使用@ConfigurationProperties(prefix = "spring.redis"),读取 yml 中 redis 地址、端口、密码,自动注入到 Redis 连接工厂,无需手动读取配置文件。

六、完整闭环流程(串联所有步骤)

  1. 启动类加@SpringBootApplication,开启@EnableAutoConfiguration;
  2. @Import(AutoConfigurationImportSelector)执行加载逻辑;
  3. 扫描所有 jar 包META-INF/spring.factories,加载全部自动配置类列表;
  4. 逐个校验配置类上的条件注解,过滤不满足条件的配置;
  5. 剩余生效的自动配置类作为配置类纳入 Spring 容器解析;
  6. 解析配置类中@Bean方法,自动创建组件 Bean;
  7. 通过@ConfigurationProperties读取 yml 配置,给组件注入参数;
  8. 若开发者自定义同名 Bean,@ConditionalOnMissingBean使自动配置失效,实现自定义覆盖默认配置。

七、两大扩展点(面试加分)

  1. 自定义 starter自己写 META-INF/spring.factories,定义自定义 AutoConfiguration,实现业务组件开箱即用,遵循自动配置同一套规范;
  2. 排除指定自动配置启动注解排除不需要的自动类,减少容器加载:
@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)

八、精简口述总结

SpringBoot 自动配置由 @EnableAutoConfiguration 驱动,通过 AutoConfigurationImportSelector 读取各个 jar 的 spring.factories 文件获取所有自动配置类;依靠 @ConditionalOnClass、@ConditionalOnMissingBean 等条件注解实现按需加载;配置类内部使用 @Bean 提供默认组件,配合 @ConfigurationProperties 读取 yml 配置;用户自定义 Bean 可覆盖默认自动装配,最终实现引入依赖即可开箱即用,无需大量手动配置。

相关新闻

  • SQL 递归查询实战:CTE 递归处理树形组织架构和物料 BOM
  • 2026昆山奢侈品回收实地横评:从估价到打款,这3家最让人放心 - 生活测评君
  • Gist插件与GitHub无缝集成:企业版API URL自定义教程

最新新闻

  • 医用温控仪读数乱屏死机?抗干扰兼容高性价比方案
  • Unity 3D毕设选题指南:六大前沿方向与实战避坑策略
  • C++字符串处理实战:从“斯诺登密码”题解看映射、分割与组合算法
  • C++在复杂系统开发中的核心优势与全链路优化实战
  • 测试转大模型:从真实需求重新拆一遍
  • 2026年7月基坑支护/沟槽支护箱行业公司推荐_赣州世宏金属材料有限公司 - 行业平台推荐

日新闻

  • AI云原生实战05-金融AI上云最难的不是技术,是“不出事“——TCE银行风控架构拆解
  • 2026年GEOSEO优化公司选型深度测评:五大硬核标准严选,这六家重塑搜索增长新格局 - 品牌前沿专家
  • **核验!2026年7月卡地亚香港**售后网点地址及服务电话公告 - 卡地亚服务中心

周新闻

  • SaaS软件行业GEO实践:AI搜索时代的品牌可见性与获客新路径
  • 什么是PCTFE?医药高端包装的“防潮王牌“材料
  • 【JVM调优实战】16-可视化利器-JConsole-VisualVM-JMC

月新闻

  • 2026年6月公司网站搭建最新热门渠道测评:四大低成本/零代码平台对比+避坑
  • 【Linux】Linux arm 编译QT程序,出现expected “}“报错
  • 【MATLAB例程】四基站二维AOA定位与距离辅助增强对比仿真。基于角度观测和测距修正的固定目标平面定位精度分析

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号