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 是自动配置的打包分发形式,将是打打的加分项。

#大厂##八股文##面试##面经#
八股文必备题库 文章被收录于专栏

带你复盘大厂八股文面试,拆解面试官到底想听啥

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务