Spring Boot 自动配置原理是什么
分享一份2025年Java面试宝典: https://pan.baidu.com/s/1RUVf75gmDVsg8MQp4yRChg?pwd=9b3g (提取码: 9b3g),里面包含了Spring Boot核心原理、高频面试题及答案,帮你轻松应对面试!
大家好,今天我们来聊聊Java面试中一个非常高频且重要的技术点——Spring Boot自动配置原理。理解了Spring Boot自动配置原理,面试官就会知道你不仅仅会写Spring Boot,更懂得它背后的魔法。
一、什么是Spring Boot自动配置?
简单来说,Spring Boot自动配置就是它自动帮我们配置好了很多常用的Bean和功能,不用我们像以前用Spring那样写一大堆XML配置或者@Configuration类。想象一下,以前你要集成MyBatis或者Redis,是不是要手动配数据源、SqlSessionFactory、Template等等?现在用Spring Boot,只需要引入spring-boot-starter-xxx依赖,它就能帮你把这些都准备好!
二、Spring Boot自动配置是如何生效的?
Spring Boot自动配置原理的核心在于@SpringBootApplication这个注解。我们点进去看,会发现它组合了三个关键注解:
@SpringBootConfiguration: 表明这是一个配置类(相当于@Configuration)。@ComponentScan: 开启组件扫描,扫描主类所在包及其子包下的@Component,@Service,@Controller,@Repository等。@EnableAutoConfiguration: 这是Spring Boot自动配置的开关!
关键来了!@EnableAutoConfiguration做了什么呢?
- 它导入了
AutoConfigurationImportSelector这个类。 - 这个Selector会去加载所有在
META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports文件中定义好的自动配置类。 - Spring Boot为我们提供的各种
starter(比如spring-boot-starter-web,spring-boot-starter-data-jpa),它们里面都包含了这样的spring.factories文件,列出了它们要启用的自动配置类。

三、自动配置类是怎么工作的?
这些自动配置类(名字通常是xxxAutoConfiguration)本身也是普通的@Configuration类。但是,它们非常聪明,不会无脑地创建Bean。它们会利用@Conditional系列注解来做条件判断。
这些条件注解是Spring Boot自动配置原理的精髓所在!
@ConditionalOnClass: 当类路径上存在指定的类时,才生效配置。比如配置DataSourceAutoConfiguration的条件之一就是存在DataSource类。@ConditionalOnMissingBean: 当容器中不存在指定类型的Bean时,才创建这个Bean。这是非常重要的条件!它确保了如果你自己手动配置了某个Bean(比如你自己在配置类里@Bean了一个DataSource),那么Spring Boot的自动配置就不会生效,避免了冲突。@ConditionalOnProperty: 当指定的配置属性满足特定值时,才生效配置。@ConditionalOnWebApplication/@ConditionalOnNotWebApplication: 判断是否是Web应用环境。
举个栗子: 比如DataSourceAutoConfiguration,它会检查:
- 类路径有没有
DataSource.class(@ConditionalOnClass({ DataSource.class, EmbeddedDatabaseType.class })) - 你项目里有没有配置数据源相关的属性(比如
spring.datasource.url) - 最重要的是,容器里现在还没有
DataSource这个Bean(@ConditionalOnMissingBean(DataSource.class)) 如果所有这些条件都满足,它才会自动帮你配置一个DataSourceBean。
四、Spring Boot自动配置原理总结
所以,总结一下Spring Boot自动配置原理的关键步骤:
- 通过
@EnableAutoConfiguration开启自动配置。 - 加载所有Jar包中
META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports文件里定义的自动配置类。 - 这些自动配置类利用大量的
@Conditional注解进行条件装配:有需要的类、没有冲突的Bean、有对应的配置属性,满足条件才会创建对应的Bean。 - 条件装配的核心是
@ConditionalOnMissingBean,它让我们的自定义配置能覆盖自动配置。
理解了这个Spring Boot自动配置原理,你就能明白为什么引入一个starter就能直接用,为什么你自己的@Bean能覆盖默认配置。面试被问到“Spring Boot自动配置原理”,就可以自信地从这个角度去阐述。
求职利器推荐: 如果大家在准备面试过程中需要购买面试鸭会员,可以关注 面试鸭返利网。通过 面试鸭返利网 下单购买,还能享受 25元返利 优惠哦!帮你省下一点资料费。

最后再分享一次这份实用的资源:
2025年Java面试宝典: https://pan.baidu.com/s/1RUVf75gmDVsg8MQp4yRChg?pwd=9b3g (提取码: 9b3g),祝大家面试顺利,拿到心仪Offer!


