目录
2. 分析入口:@SpringBootApplication 注解
2.2.1 @SpringBootConfiguration
2.2.3 @EnableAutoConfiguration
3. 核心流程解析:AutoConfigurationImportSelector
一、Spring Boot 自动配置原理分析(源码跟踪)
1. 分析目标
通过源码跟踪,深入剖析 Spring Boot 框架底层是如何完成自动配置的,明确自动配置类加载、Bean 注册的全过程。
2. 分析入口:@SpringBootApplication 注解
2.1 应用启动方式
Spring Boot 应用通过“引导类”启动,该类上使用注解:
@SpringBootApplication
这是分析自动配置原理的起点。
2.2 注解分解
@SpringBootApplication 本质上是一个组合注解,按住shift点击这个注解去查看,

内部封装了以下三个核心注解:
2.2.1 @SpringBootConfiguration
-
该注解与
@Configuration注解作用相同,用来声明当前也是一个配置类。
2.2.2 @ComponentScan
-
实现包扫描功能,默认扫描当前包及其子包,但不包括外部第三方包。
2.2.3 @EnableAutoConfiguration
-
自动配置的核心注解。
-
内部封装了
@Import(AutoConfigurationImportSelector.class),导入了自动配置类。
3. 核心流程解析:AutoConfigurationImportSelector
3.1 实现接口

AutoConfigurationImportSelector 实现了 DeferredImportSelector 接口,继承自 ImportSelector。


3.2 关键方法
public String[] selectImports(AnnotationMetadata metadata)
-
返回值是
String[],封装了所有要加载的配置类的全类名。

4. 自动配置类来源文件
一步一步从源码中找到自动配置的来源:



这里因为是3.x的版本,factories已经弃用,所以只有一个imports。
如果是3.x以前,selectImports() 方法最终从以下两个文件中读取自动配置类信息(从上面的断言可以看出来):
4.1 Spring Boot < 2.7
-
META-INF/spring.factories(传统方式)
4.2 Spring Boot ≥ 2.7
-
META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports(推荐方式)


当前所用版本为 Spring Boot 2.7,两个文件都兼容;3.x 版本将完全弃用
spring.factories。
5. 配置类示例分析
以 JSON 处理工具 Gson 为例:
5.1 自动配置类定位
在自动配置类清单中,找到:
GsonAutoConfiguration

5.2 配置类源码内容

@AutoConfiguration
public class GsonAutoConfiguration {
@Bean
@ConditionalOnMissingBean
public Gson gson() {
return new GsonBuilder().create();
}
}

5.3 自动生效的条件
-
使用了
@ConditionalOnMissingBean:当容器中没有该类型 Bean时才注入 -
这样即便用户自定义 Bean,也不会产生冲突
6. 自动配置完整流程总结
6.1 核心注解路径
@SpringBootApplication
└── @EnableAutoConfiguration
└── @Import(AutoConfigurationImportSelector.class)
└── selectImports()
└── 加载配置类(文件列表)
6.2 文件路径说明
| 文件路径 | 用途 |
|---|---|
META-INF/spring.factories | 旧版本使用,定义自动配置类 |
META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports | 新版本推荐方式,替代 spring.factories |
6.3 自动配置类内容
-
本质上是带有
@Configuration的类 -
通过
@Bean定义组件 -
搭配
@Conditional...注解,实现按需装配
7. 条件装配机制预告
自动配置类中大量使用了以 @Conditional 开头的注解(如 @ConditionalOnMissingBean),用于实现条件化 Bean 注册。
下篇将详细讲解 Spring Boot 的条件装配机制及相关注解的使用方式。
END
学习自:黑马程序员——JavaWeb课程

被折叠的 条评论
为什么被折叠?



