自动装配是 SpringBoot "约定大于配置" 的核心,一句话总结:
SpringBoot 启动时,自动扫描指定文件里的配置类,按需加载 Bean,无需手动配置。
不用再写 XML、不用手动注册 DispatcherServlet、DataSource 等,全靠自动装配搞定。
一、核心入口:@SpringBootApplication
启动类上的这个注解,是自动装配的总开关,它本质是 3 个注解的合体:
java
@SpringBootConfiguration
@ComponentScan
@EnableAutoConfiguration // 👈 自动装配的核心注解
真正负责自动装配的就是:@EnableAutoConfiguration
二、自动装配核心原理(5 步彻底搞懂)
第 1 步:@EnableAutoConfiguration 开启装配
这个注解内部通过 @Import 导入一个关键类:
AutoConfigurationImportSelector
作用:告诉 SpringBoot------去加载所有自动配置类。
第 2 步:加载自动配置文件
AutoConfigurationImportSelector 会去 classpath 下找一个固定文件:
META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
(SpringBoot 2.7+ 新版路径,旧版是 spring.factories)
这个文件里写死了所有支持自动装配的类,比如:
WebMvcAutoConfigurationDataSourceAutoConfigurationRedisAutoConfigurationMybatisAutoConfiguration
SpringBoot 启动时会读取这个文件里的所有配置类。
第 3 步:条件注解控制是否生效(按需加载)
不是所有配置类都会加载,而是通过条件注解判断:
@ConditionalOnClass:类路径下存在某个类才生效@ConditionalOnMissingBean:容器没有这个 Bean 才创建@ConditionalOnProperty:配置文件有对应配置才生效
举个例子(Redis 自动配置):
java
@Configuration
@ConditionalOnClass(RedisTemplate.class) // 导入了 Redis 依赖才生效
@EnableConfigurationProperties(RedisProperties.class)
public class RedisAutoConfiguration {
@Bean
@ConditionalOnMissingBean
public RedisTemplate<String, Object> redisTemplate() {
// 自动创建 RedisTemplate Bean
}
}
👉 你引入依赖 = 开启自动配置,这就是 SpringBoot "开箱即用"。
第 4 步:绑定配置文件(application.yml)
自动配置类会读取 xxxProperties 类,而这个类又和配置文件绑定:
java
@ConfigurationProperties(prefix = "spring.redis")
public class RedisProperties {
private String host = "localhost";
private int port = 6379;
// ...
}
你在 application.yml 写:
yaml
spring.redis:
host: 127.0.0.1
port: 6379
SpringBoot 就会自动把值注入,生成可用的 RedisTemplate。
第 5 步:向容器注册 Bean
最后,自动配置类通过 @Bean 把组件注册到 Spring 容器,你直接 @Autowired 使用即可。
三、自动装配完整流程(极简版)
@EnableAutoConfiguration
→ 导入 AutoConfigurationImportSelector
→ 读取 META-INF/spring/xxx.imports
→ 获取所有自动配置类
→ 通过 @Conditional 条件判断是否生效
→ 读取 application.yml 配置
→ 向容器注册 Bean
→ 自动装配完成
四、高频面试题答案(背会就能说清楚)
1. SpringBoot 自动装配原理是什么?
SpringBoot 通过 @EnableAutoConfiguration 注解,自动扫描 classpath 下 META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports 文件中定义的所有自动配置类,再通过条件注解 @Conditional 按需加载,自动向 Spring 容器注册 Bean,实现开箱即用。
2. 自动装配的核心注解?
@EnableAutoConfiguration:开启自动装配@Conditional:条件控制是否生效@ConfigurationProperties:绑定配置文件
3. 自动配置类在哪里?
SpringBoot 2.7+:
spring-boot-autoconfigure 包下
META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
总结
- 总开关 :
@EnableAutoConfiguration - 配置来源:固定文件里的自动配置类
- 按需加载 :
@Conditional条件注解控制 - 配置绑定 :
xxxProperties+ application.yml - 最终效果:引入依赖 → 自动配置 → 直接使用