JavaWeb——SpringBoot原理(4/7)-自动配置-原理分析-源码跟踪(分析入口:@SpringBootApplication 注解、自动配置类来源文件、完整流程总结)

目录

一、Spring Boot 自动配置原理分析(源码跟踪)

1. 分析目标

2. 分析入口:@SpringBootApplication 注解

2.1 应用启动方式

2.2 注解分解

2.2.1 @SpringBootConfiguration

2.2.2 @ComponentScan

2.2.3 @EnableAutoConfiguration

3. 核心流程解析:AutoConfigurationImportSelector

3.1 实现接口

3.2 关键方法

4. 自动配置类来源文件

4.1 Spring Boot < 2.7

4.2 Spring Boot ≥ 2.7

5. 配置类示例分析

5.1 自动配置类定位

5.2 配置类源码内容

5.3 自动生效的条件

6. 自动配置完整流程总结

6.1 核心注解路径

6.2 文件路径说明

6.3 自动配置类内容

7. 条件装配机制预告



一、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课程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值