大家好我是锋哥。今天分享关于【Java高频面试题Springboot的自动配置原理】面试题 。希望对大家有帮助Java高频面试题Springboot的自动配置原理Spring Boot 的**自动配置Auto-Configuration**是其“开箱即用”的核心机制之一它的目标是根据项目中引入的依赖和当前环境自动为你配置 Spring Bean而无需手动 XML 或大量 Java 配置。下面从原理层面帮你系统讲清楚。一、自动配置是怎么启动的Spring Boot 的入口在启动类SpringBootApplication public class App { public static void main(String[] args) { SpringApplication.run(App.class, args); } }其中最关键的是这个注解SpringBootApplication它本质上是三个注解的组合SpringBootConfigurationComponentScanEnableAutoConfiguration⭐核心二、自动配置的核心开关EnableAutoConfigurationEnableAutoConfiguration它做了什么开启自动配置机制并导入一批“自动配置类”底层通过Import(AutoConfigurationImportSelector.class)实现。三、核心机制AutoConfigurationImportSelector这是自动配置的“调度中心”。它主要做三件事1. 加载自动配置类名单Spring Boot 会从配置文件中加载META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.importsSpring Boot 3或者旧版本META-INF/spring.factories里面定义了大量自动配置类例如org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration2. 过滤哪些配置生效不是所有自动配置都会加载而是会经过条件判断重点四、自动配置的核心机制条件注解Condition自动配置类上通常会带有大量条件注解例如常见条件注解ConditionalOnClass类路径中存在某个类才生效ConditionalOnMissingBean容器中没有某个 Bean 才创建ConditionalOnProperty配置文件中存在某个配置才生效ConditionalOnBean容器中已有某个 Bean 才生效举个例子非常关键Configuration ConditionalOnClass(DataSource.class) public class DataSourceAutoConfiguration { Bean ConditionalOnMissingBean public DataSource dataSource() { return new HikariDataSource(); } }含义只有当 classpath 中存在DataSource类且容器中没有 DataSource Bean 才会自动创建一个 DataSource五、自动配置的执行流程总结整体流程可以理解为SpringApplication.run() ↓ EnableAutoConfiguration ↓ AutoConfigurationImportSelector ↓ 读取 AutoConfiguration.imports ↓ 加载一堆自动配置类 ↓ 每个配置类进行 Conditional 判断 ↓ 满足条件 → 注册 Bean 到 Spring 容器 ↓ 完成自动装配六、为什么“引入依赖就能自动配置”关键在于classpath 条件注解例如你引入spring-boot-starter-web会自动带来TomcatSpring MVCJackson于是classpath 中存在相关类 ✔条件成立 ✔自动配置生效 ✔ 最终自动帮你配置DispatcherServletJackson HttpMessageConverter内嵌 TomcatSpring MVC 组件七、自动配置 vs 手动配置方式特点手动配置需要自己定义 Bean自动配置Spring Boot 根据条件自动创建但本质是自动配置 帮你写了一堆“默认配置类”八、如何排查自动配置可以通过以下方式查看哪些自动配置生效1. 开启 debug 日志debugtrue控制台会输出Positive matches Negative matches告诉你哪些自动配置生效哪些没有生效为什么没生效2. Actuator如果引入访问/actuator/conditions可以查看条件匹配情况九、如何自定义或覆盖自动配置Spring Boot 的原则是用户配置优先于自动配置如果你自己定义了 BeanBean public DataSource dataSource() { return new DruidDataSource(); }那么 自动配置中的ConditionalOnMissingBean会失效 Spring Boot 就不会再创建默认 DataSource十、一句话总结Spring Boot 自动配置的本质是通过 EnableAutoConfiguration 条件注解 配置类加载机制根据 classpath 和环境自动为容器注册 Bean从而实现“约定优于配置”。