全部学科
Python全栈
python
NodeJS全栈
nodejs
📅 2026-05-18 6 分钟 ✍️ juanwangdev

Spring Boot 自动配置原理概述

Spring Boot自动配置通过约定优于配置的理念,根据类路径下的依赖自动配置Spring应用。

核心组件

@SpringBootApplication

Java
@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

// 等价于
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan
public @interface SpringBootApplication { ... }

@EnableAutoConfiguration

Java
@AutoConfigurationPackage
@Import(AutoConfigurationImportSelector.class)
public @interface EnableAutoConfiguration {
    String ENABLED_OVERRIDE_PROPERTY = "spring.boot.enableautoconfiguration";
}

自动配置流程

Java
启动 -> @EnableAutoConfiguration -> AutoConfigurationImportSelector
    -> 读取spring.factories -> 加载自动配置类 -> 条件注解过滤 -> 注册Bean

AutoConfigurationImportSelector

properties
public class AutoConfigurationImportSelector implements DeferredImportSelector {

    @Override
    public String[] selectImports(AnnotationMetadata annotationMetadata) {
        // 1. 读取spring.factories中的EnableAutoConfiguration配置
        // 2. 去重、过滤
        // 3. 应用条件注解
        // 4. 返回需要加载的配置类
    }
}

spring.factories机制

Java
# META-INF/spring.factories
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration,\
org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration,\
org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration

条件注解过滤

YAML
@Configuration
@ConditionalOnClass(DataSource.class)          // 类路径存在DataSource
@ConditionalOnMissingBean(DataSource.class)    // 容器中没有DataSource
@EnableConfigurationProperties(DataSourceProperties.class)
public class DataSourceAutoConfiguration {

    @Bean
    @ConditionalOnProperty(prefix = "spring.datasource", name = "type")
    public DataSource dataSource(DataSourceProperties properties) {
        return properties.initializeDataSourceBuilder().build();
    }
}

自动配置报告

Java
# 启用自动配置报告
debug: true

# 或
spring:
  autoconfigure:
    report:
      enabled: true

启动后可在日志中查看自动配置匹配报告。

排除自动配置

text
// 方式一:注解排除
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})

// 方式二:配置排除
spring:
  autoconfigure:
    exclude: org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration

要点总结

  • @EnableAutoConfiguration触发自动配置
  • AutoConfigurationImportSelector读取spring.factories
  • 条件注解决定配置是否生效
  • 可通过exclude排除特定自动配置
  • debug=true查看自动配置报告
想在手机上练习这篇文章的配套题目?
使用微信卷王开发者小程序,打开首页顶部扫码功能识别二维码
← 上一篇 Spring Boot 404等容器级异常处理
下一篇 → Spring Boot @EnableAutoConfiguration注解
扫码体验小程序
加载中
想在手机上刷题学习?
使用微信卷王开发者小程序,打开首页顶部扫码功能识别二维码