全部学科
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 条件注解@Conditional
下一篇 → Spring Boot 自动配置类加载机制
想查看更多题目和详细解析?
小程序提供完整的题库、模拟考试和详细解析
马上就来

长按或扫描二维码,立即体验

扫码体验小程序
马上就来
使用微信扫描二维码
立即体验完整题库