SpringBoot的自动配置原理
Spring Boot 的 自动配置原理 是它区别于传统 Spring 框架的核心特性之一,可以帮开发者省去大量的手动配置。下面我从整体原理、关键机制和运行流程三个方面给你梳理:
1. 核心思想
Spring Boot 的目标是:
- 约定大于配置(Convention over Configuration)
 - 按需加载(只配置需要的 Bean)
 - 自动装配(根据环境条件自动注入合适的 Bean)
 
这背后主要依赖 Spring 容器的条件装配机制(@Conditional 系列注解)+ 配置元数据(spring.factories / AutoConfiguration)。
2. 核心机制
(1) 启动入口 @SpringBootApplication
@SpringBootApplication
public class DemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
}
@SpringBootApplication 本质是一个组合注解,核心包含:
@SpringBootConfiguration(继承自@Configuration,表示配置类)@EnableAutoConfiguration(开启自动配置)@ComponentScan(包扫描)
(2) @EnableAutoConfiguration
这是自动配置的核心注解,内部通过:
@Import(AutoConfigurationImportSelector.class)
把一堆自动配置类导入到容器中。
(3) spring.factories / META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
在 Spring Boot 2.x 用 spring.factories,到了 3.x 改成了 AutoConfiguration.imports 文件。
这个文件里列出了所有可用的自动配置类,例如:
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration,\
org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration,\
org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration
启动时,Spring Boot 会批量加载并尝试应用这些类。
(4) 条件装配 @Conditional
每个自动配置类都不是直接生效,而是配合 @ConditionalOnClass、@ConditionalOnMissingBean 等注解,决定是否启用:
@ConditionalOnClass:类路径下存在某个类时才生效@ConditionalOnMissingBean:容器中没有某个 Bean 时才装配@ConditionalOnProperty:配置文件里某个属性满足条件才启用
例如:DataSourceAutoConfiguration 只有在你引入了数据库驱动并且配置了数据源相关属性时才会生效。
3. 运行流程(启动时发生了什么)
- 启动应用 → 读取 
@SpringBootApplication - 启用自动配置 → 
EnableAutoConfiguration→AutoConfigurationImportSelector - 加载配置类 → 扫描 
spring.factories或AutoConfiguration.imports中的自动配置类 - 条件过滤 → 判断 
@Conditional注解是否满足条件 - 注册 Bean → 满足条件的自动配置类被注册到容器中
 - 结合配置文件 → 
application.yml/application.properties的值会绑定到对应的配置类(通过@ConfigurationProperties) 
4. 举例:WebMvcAutoConfiguration
以 Spring MVC 为例:
- 你只要引入了 
spring-boot-starter-web,spring.factories就会加载WebMvcAutoConfiguration - 里面会自动配置 
DispatcherServlet、RequestMappingHandlerMapping、MessageConverters等 - 如果你自己定义了某些 Bean(比如自定义 
DispatcherServlet),自动配置就会被跳过(因为有@ConditionalOnMissingBean) 
5. 总结
Spring Boot 自动配置原理的关键词:
- @SpringBootApplication → 开启自动配置
 - EnableAutoConfiguration → 导入自动配置类
 - spring.factories / AutoConfiguration.imports → 存放候选配置类
 - @Conditional 系列注解 → 按需装配
 - @ConfigurationProperties → 属性绑定
 
👉 简而言之:Spring Boot 会在启动时扫描并加载一堆预定义的配置类,再通过条件判断决定哪些生效,从而实现自动配置。

                
            
        
浙公网安备 33010602011771号