SpringBoot 自动装配原理

自动装配是 SpringBoot "约定大于配置" 的核心,一句话总结:
SpringBoot 启动时,自动扫描指定文件里的配置类,按需加载 Bean,无需手动配置

不用再写 XML、不用手动注册 DispatcherServletDataSource 等,全靠自动装配搞定。


一、核心入口:@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)

这个文件里写死了所有支持自动装配的类,比如:

  • WebMvcAutoConfiguration
  • DataSourceAutoConfiguration
  • RedisAutoConfiguration
  • MybatisAutoConfiguration

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


总结

  1. 总开关@EnableAutoConfiguration
  2. 配置来源:固定文件里的自动配置类
  3. 按需加载@Conditional 条件注解控制
  4. 配置绑定xxxProperties + application.yml
  5. 最终效果:引入依赖 → 自动配置 → 直接使用
相关推荐
我不是FD16 小时前
OpenAI vs Anthropic API 对比:流式返回 + Adapt 适配层完整方案
java·人工智能·python
Peter(阿斯拉)16 小时前
[Android]_[中级]_[如何创建MVVM架构原型]
android·java·架构·mvvm·viewmodel
地瓜伯伯16 小时前
从MESI缓存一致性协议讲透synchronized的底层
java·spring boot·spring·spring cloud·微服务·springcloud
zhenlai201216 小时前
Vue3 + SpringBoot + AI:我做了一个股票分析工具(第1周复盘)
人工智能·spring boot·后端
Devin~Y16 小时前
大厂 Java 面试实录:从音视频内容社区到 AI RAG 的全链路技术设计
java·spring boot·redis·spring cloud·微服务·kafka·音视频
CoderYanger16 小时前
A.每日一题:3612. 用特殊操作处理字符串 I
java·程序人生·leetcode·面试·职场和发展·学习方法·改行学it
承渊政道16 小时前
飞算JavaAI 智能引导背后的多 Agent 协作机制解析:从老旧 Java 后台升级到可运行工程
java·开发语言·spring boot·安全·intellij-idea·软件工程·ai编程
唐青枫18 小时前
Java Flyway 实战指南:用 SQL 脚本管理数据库版本
java
Oneslide1 天前
Ubuntu 26.04 完整安装 Fcitx5 中文拼音输入法指南(适配默认Wayland)
后端
huangdong_1 天前
电商平台图片URL原图转换技术深度解析:从缩略图到高清原图的完整方案
java·后端·spring