Spring · 主观题 · 第 58 题
Java 后端开发面试 · 第 58 题
讲讲 Spring Boot 自动配置的原理,以及如何写一个自己的 starter。
参考答案
1. 入口:@SpringBootApplication = @SpringBootConfiguration + @ComponentScan + @EnableAutoConfiguration。
2. @EnableAutoConfiguration 通过 AutoConfigurationImportSelector 读取 META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports(Spring Boot 2.7 之前是 spring.factories)中列出的自动配置类。
3. 条件装配:@ConditionalOnClass(classpath 上有某个类)、@ConditionalOnMissingBean(用户没有自己定义时才生效,所以用户配置优先)、@ConditionalOnProperty 等;配置值通过 @ConfigurationProperties 绑定。
4. 调试:启动时加 --debug 可以查看条件评估报告,知道哪些自动配置生效了、哪些没有。
5. 自定义 starter:写一个 xxx-spring-boot-autoconfigure 模块,包含 @AutoConfiguration 配置类、条件注解、属性类,并在 imports 文件里登记;再写一个 xxx-spring-boot-starter 模块,只负责聚合依赖;使用方引入 starter 即可。
解析
imports 文件加条件注解是核心,能说出「用户配置优先」的机制更好。