网站Logo GESONG

SpringBoot自动配置原理

gesong
9
2025-07-28

什么是SpringBoot自动配置

SpringBoot 定义了一套接口规范,这套规范规定:SpringBoot 在启动时会扫描外部引用 jar 包中的META-INF/spring.factories文件,将文件中配置的类信息加载到 Spring 容器,并执行类中定义的各种操作。对于外部 jar 来说,只需要按照 SpringBoot 定义的标准,就能将自己的功能装载进 SpringBoot。
自 Spring Boot 3.0 开始,自动配置包的路径从META-INF/spring.factories 修改为 META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports

如何实现自动配置

1. @SpringBootApplication注解

自动配置的起点通常是 @SpringBootApplication 注解,它是一个组合注解,包含了三个重要注解:

  • @SpringBootConfiguration:标记为一个 Spring 配置类,继承自@Configuration

  • @EnableAutoConfiguration:启用 Spring Boot 的自动配置机制。

  • @ComponentScan扫描被@Component (@Service,@Controller)注解的 bean,注解默认会扫描启动类所在的包下所有的类 ,可以自定义不扫描某些 bean

其中 @EnableAutoConfiguration 是自动配置的核心。

2. @EnableAutoConfiguration:实现自动装配的核心注解,它也是一个组合注解,其中包含两个注解:

  • @AutoConfigurationPackage将标注该注解的类所在的包路径保存到 AutoConfigurationPackages 中。

  • @Import({AutoConfigurationImportSelector.class})注解引入了 AutoConfigurationImportSelector,这是自动配置的核心处理器。

3. AutoConfigurationImportSelector: 加载自动装配类

该类实现了DeferredImportSelector,重写了getImportGroup方法,返回AutoConfigurationGroup类,后续会走到AutoConfigurationGroup类中的process方法,然后调用getAutoConfigurationEntry方法加载所有自动配置类,其中会经历了一遍筛选,@ConditionalOnXXX 中的所有条件都满足的配置类才会返回。

AutoConfigurationImportSelector的执行时机

通过beanFactory后置处理器执行,refresh -> invokeBeanFactoryPostProcessors -> invokeBeanDefinitionRegistryPostProcessors -> ConfigurationClassPostProcessor.postProcessBeanDefinitionRegistry -> processConfigBeanDefinitions -> ConfigurationClassParser.parse -> DeferredImportSelectorHandler.process -> DeferredImportSelectorGroupingHandler.processGroupImports

参考:

JavaGuide(Java学习&面试指南) | JavaGuide

动物装饰