自动配置是 Spring Boot 最具辨识度的特性之一。它在启动时根据 classpath 中的依赖、配置属性和已存在的 Bean,自动装配合理的默认组件,让你少写很多样板代码。但会用是一回事,能自己写一个 Starter 又是另一回事。下面我们先把自动配置的原理理顺,再动手实现一个最小的 Starter,最后谈调试和踩坑。

自动配置是怎么回事
传统的 Spring 项目需要你在 XML 或配置类中显式声明每一个 Bean。Spring Boot 的做法是:启动时扫描所有候选的自动配置类,然后根据条件注解判断哪些该生效。整个过程由 @SpringBootApplication -> @EnableAutoConfiguration 触发。
@SpringBootApplication 其实是一个组合注解,里面就包含了 @EnableAutoConfiguration。它做的事情是导入所有声明好的自动配置类。这些类本身也是 @Configuration,内部会注册符合条件的具体 Bean。
加载流程:从 run() 到 Bean 注册
@SpringBootApplication
public class DemoApp {
public static void main(String[] args) {
SpringApplication.run(DemoApp.class, args);
}
}
当 run() 执行后,Spring Boot 会读取 META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports(Spring Boot 3 新文件)或 spring.factories(Spring Boot 2.x),获得自动配置类的全类名列表。然后逐个解析,对于每个配置类,评估它上面所有的条件注解。只有全部满足,才会执行里边的 @Bean 方法。
举个例子,在 Spring Boot 3 中,你的自定义 Starter 可以这样声明:
# META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
com.example.starter.DemoFeatureAutoConfiguration
而在 2.x 中则需要:
# META-INF/spring.factories
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.example.starter.DemoFeatureAutoConfiguration
框架会在合适的位置导入这些类,然后条件评估。



