当前位置: 首页 > news >正文

Spring Boot 自动配置

目录

@SpringBootApplication

@SpringBootConfiguration

@EnableAutoConfiguration

@ComponentScan

一、自动装配的核心机制

二、源码分析流程

2.1 起点:@SpringBootApplication

2.2 @EnableAutoConfiguration 的作用

2.3  AutoConfigurationImportSelector 源码分析

2.4 自动配置类加载过程

2.5 自动配置类的条件过滤 

条件注解过滤逻辑

三、自动装配完整流程


@SpringBootApplication

@SpringBootApplication 是 Spring Boot 应用的核心入口注解,它通过组合多个关键注解简化了SpringBoot应用的配置。

  • @SpringBootConfiguration

    • 作用:标识当前类是一个 Spring Boot 的配置类
    • 源码:本质上是 @Configuration 的别名
    • 功能:等价于 @Configuration ,表示该类中可能定义 @Bean 方法
  • @EnableAutoConfiguration

    • 启用 Spring Boot 的自动装配机制。

    • 本章内容重点讨论这个注解
  • @ComponentScan

    • 自动扫描并注册当前包及其子包下的组件(如 @Component, @Service, @Controller)。

    • 若未指定 basePackages,则扫描主类所在的包及其子包。


Spring Boot的自动装配(Auto-Configuration)是其核心特性之一。

它通过约定大于配置的方式,自动加载符合条件的Bean到Spring容器中


一、自动装配的核心机制

自动装配基于以下核心组件实现:

  • @EnableAutoConfiguration 注解
    • 触发自动装配的入口。


  • spring.factories 文件(Spring Boot 2.x)或 AutoConfiguration.improts(Spring Boot 3.x)
    • 定义自动配置类的列表


  • @ConditionalOnXXX(eg. @ConditionalOnClass
    • 决定是否加载某个配置

二、源码分析流程

2.1 起点:@SpringBootApplication

Spring Boot应用的启动类通常标注 @SpringBootApplication,该注解是一个组合注解:

@SpringBootConfiguration
@EnableAutoConfiguration  // 关键注解,触发自动装配
@ComponentScan
public @interface SpringBootApplication {}

2.2 @EnableAutoConfiguration 的作用

@EnableAutoConfiguration 通过 @Import 引入了 AutoConfigurationImportSelector类:


2.3  AutoConfigurationImportSelector 源码分析

注:这里以Spring Boot 3.1.2版本为例,

上面说到了 3.xx版本会读取 AutoConfiguration.imports 文件,2.xx 版本会读取 spring.factories 文件

  • AutoConfigurationImportSelector 负责加载所有自动装配类:

 

关键方法 getAutoConfigurationEntry

  1. META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports(Spring Boot 3.x+)或 spring.factories(Spring Boot 2.x)加载配置类列表。

  2. 过滤掉不满足条件的配置类(基于条件注解)。

  3. 2.xx版本:SpringFactoriesLoader.loadSpringFactories() 方法负责加载配置类

 


2.4 自动配置类加载过程

以 Spring Boot 3.x 为例,自动配置类定义在文件中:
META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
内容示例:


2.5 自动配置类的条件过滤 

自动配置类通常包含条件注解,例如 DataSourceAutoConfiguration

@AutoConfiguration
@ConditionalOnClass({ DataSource.class, EmbeddedDatabaseType.class }) // 类路径存在时才生效
@ConditionalOnMissingBean(type = "io.r2dbc.spi.ConnectionFactory")  // 容器中不存在指定 Bean 时生效
@EnableConfigurationProperties(DataSourceProperties.class)
public class DataSourceAutoConfiguration {
    // 自动创建 DataSource Bean
    @Bean
    @ConditionalOnMissingBean(DataSource.class)
    public DataSource dataSource(...) { ... }
}

条件注解过滤逻辑

OnClassCondition@ConditionalOnClass 的实际执行类

public class OnClassCondition extends FilteringSpringBootCondition {
    @Override
    protected ConditionOutcome[] getOutcomes(String[] autoConfigurationClasses, AutoConfigurationMetadata metadata) {
        // 检查类路径是否存在指定类
        for (String autoConfigurationClass : autoConfigurationClasses) {
            String onClass = metadata.get(autoConfigurationClass, "ConditionalOnClass");
            if (onClass != null && !ClassUtils.isPresent(onClass, classLoader)) {
                return ConditionOutcome.noMatch("Required class not found: " + onClass);
            }
        }
        ...
    }
}


三、自动装配完整流程

  1. 启动类扫描@SpringBootApplication 触发 @EnableAutoConfiguration

  2. 加载配置类列表AutoConfigurationImportSelector 读取 AutoConfiguration.importsspring.factories 文件。

  3. 过滤配置类:通过条件注解(如 @ConditionalOnClass)排除不满足条件的配置类。

  4. 注册 Bean:剩余的配置类通过 @Bean 方法向容器注册组件。

相关文章:

  • 23--华为交换机端口安全完全指南:从“门禁系统“到“防御堡垒“
  • 第九章 VGA显示矩阵
  • https文件下载异常问题排查
  • OpenCV 从入门到精通(day_02)
  • 中科驭数高性能网卡产品 成就DeepSeek推理模型网络底座
  • 目标检测的训练策略
  • 使用C++实现HTTP服务
  • #Git 变基(Rebase)案例
  • squared = map(lambda x: x ​** 2, nums) 在VScode中报错
  • 背光模组膜材褶皱(膜拱)不良分析案例
  • VUE3+Mapbox-GL 实现鼠标绘制矩形功能的详细代码和讲解
  • 【设计模式】适配器模式
  • 【C++】 —— 笔试刷题day_10
  • 【C#.NET】Web API项目Swagger配置扩展
  • 【嵌入式学习3】多用户多任务服务器实战
  • Upload-labs 靶场搭建 及一句话木马的原理与运用
  • 如何将Spring Boot项目与DeepSeek AI集成并优化为AI系统
  • Modbus TCP转Profibus DP网关接防撞雷达与PLC通讯
  • oracle基础知识视图的定义和应用
  • 实操自动生成接口自动化测试用例
  • 鄂城区人民政府门户网站/快手作品免费推广软件
  • 淘宝做链接的网站/申请网址怎么申请的
  • 美女做那种视频网站有哪些/中国舆情在线
  • 淘宝上网站建设为啥这么便宜/5118数据分析平台官网
  • 如何查询网站打开速度变慢/搜索引擎广告形式有
  • 领卷网站怎么做的/搜索引擎优化