SpringBoot 自动配置原理
面试题简述
你能讲讲 Spring Boot 的自动配置原理吗?Starter 是怎么起作用的?
面试官想听的
这是校招高频原理题,主要考察候选人能否从以下三个方面串出完整逻辑:
1、自动配置触发点;
2、加载机制;
3、条件装配;
面试示例回答
Spring Boot 的自动配置其实是基于 Spring 的条件化装配机制 + SPI 扩展机制实现的。
入口是 @SpringBootApplication,它包含了 @EnableAutoConfiguration。
这个注解会导入 AutoConfigurationImportSelector,在容器启动时从 META-INF/spring.factories 文件中加载所有 XXXAutoConfiguration 类。
每个 AutoConfiguration 类都通过 @ConditionalOnClass、@ConditionalOnMissingBean 等条件注解控制是否生效。
比如: @Configuration @ConditionalOnClass(DataSource.class) public class DataSourceAutoConfiguration { ... }
当项目中间存在 DataSource 类时,Spring Boot 就会自动加载数据源配置。
说到 Starter 机制,这个其实就是把这种自动配置和依赖打包在一起的模块:
例如引入 spring-boot-starter-web,它包含:
1、Web 相关依赖,比如:Spring MVC、Tomcat 等;
2、对应的自动配置类,比如:DispatcherServletAutoConfiguration。
所以自动配置的核心逻辑是: EnableAutoConfiguration -> SPI 加载 AutoConfiguration 类 -> 条件注解控制加载 -> Bean 注册入容器。当然我们也可以自定义 Starter,只需在 META-INF/spring.factories 注册我们的自动配置类即可。
由浅入深分析
1、关键注解链:@SpringBootApplication -> @EnableAutoConfiguration -> AutoConfigurationImportSelector。
2、SPI 加载机制:读取 spring.factories,动态注册自动配置类。
3、条件化装配体系:@ConditionalOnMissingBean、@ConditionalOnProperty、@ConditionalOnClass 等。
4、自定义 Starter 流程:编写配置类 + 注册到 spring.factories。
面试加分点
1、能说明自动配置的本质是条件装配 + SPI 加载。
2、能提到加载链路:spring.factories -> AutoConfigurationImportSelector。
3、能说明 Starter 是自动配置的打包分发形式,将是打打的加分项。
#大厂##八股文##面试##面经#带你复盘大厂后端和算法面试,拆解面试官到底想听啥