全部学科
Python全栈
python
NodeJS全栈
nodejs
小程序首页
📅 2026-05-18 5 分钟 ✍️ juanwangdev

Spring Boot @EnableAutoConfiguration注解

@EnableAutoConfiguration是Spring Boot自动配置的核心注解,通过@Import机制导入自动配置类。

注解定义

Java
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@AutoConfigurationPackage
@Import(AutoConfigurationImportSelector.class)
public @interface EnableAutoConfiguration {

    // 覆盖自动配置的配置属性名
    String ENABLED_OVERRIDE_PROPERTY = "spring.boot.enableautoconfiguration";

    // 排除特定的自动配置类
    Class<?>[] exclude() default {};

    // 根据类名排除自动配置类
    String[] excludeName() default {};
}

@AutoConfigurationPackage

Java
@Import(AutoConfigurationPackages.Registrar.class)
public @interface AutoConfigurationPackage { }

// Registrar将主配置类所在包注册为基础包
// 供@ComponentScan等组件扫描使用

AutoConfigurationImportSelector

核心方法

Java
public class AutoConfigurationImportSelector implements DeferredImportSelector,
        BeanClassLoaderAware, ResourceLoaderAware, BeanFactoryAware, EnvironmentAware {

    @Override
    public String[] selectImports(AnnotationMetadata annotationMetadata) {
        if (!isEnabled(annotationMetadata)) {
            return NO_IMPORTS;
        }
        AutoConfigurationEntry autoConfigurationEntry =
            getAutoConfigurationEntry(annotationMetadata);
        return StringUtils.toStringArray(autoConfigurationEntry.getConfigurations());
    }

    protected boolean isEnabled(AnnotationMetadata metadata) {
        // 可通过spring.boot.enableautoconfiguration=false禁用
        return getEnvironment().getProperty(ENABLED_OVERRIDE_PROPERTY, Boolean.class, true);
    }
}

加载流程

Java
selectImports()
    -> getAutoConfigurationEntry()
        -> getCandidateConfigurations()           // 获取候选配置
            -> SpringFactoriesLoader.loadFactoryNames()  // 读取spring.factories
        -> removeDuplicates()                      // 去重
        -> getExclusions()                        // 获取排除项
        -> filter()                               // 条件过滤

排除配置

注解方式

YAML
@SpringBootApplication(exclude = {
    DataSourceAutoConfiguration.class,
    RedisAutoConfiguration.class
})

@EnableAutoConfiguration(excludeName = {
    "org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration"
})

配置方式

Java
spring:
  autoconfigure:
    exclude:
      - org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration
      - org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration

DeferredImportSelector特性

YAML
// AutoConfigurationImportSelector实现DeferredImportSelector
// 延迟加载,确保所有常规配置类先处理

public interface DeferredImportSelector extends ImportSelector {
    // 比普通ImportSelector晚执行
    // 保证用户自定义配置优先
}

禁用自动配置

text
# 禁用所有自动配置(极少使用)
spring:
  boot:
    enableautoconfiguration: false

要点总结

  • @EnableAutoConfiguration组合@AutoConfigurationPackage和@Import
  • AutoConfigurationImportSelector读取spring.factories加载配置类
  • exclude/excludeName排除特定自动配置
  • 实现DeferredImportSelector延迟加载
  • 可通过配置属性禁用自动配置

📝 发现内容有误?点击此处直接编辑

← 上一篇 Spring Boot 自定义异常类
下一篇 → Spring Boot 条件注解@Conditional
想查看更多题目和详细解析?
小程序提供完整的题库、模拟考试和详细解析
马上就来

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

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