Spring Boot 的自动加载机制是通过 自动配置(AutoConfiguration) 实现的,这个机制依赖于 Spring Framework 的条件化注解 + SPI 扩展机制(spring.factories
),使得开发者无需显式配置大量 XML 或 Java 配置即可快速启动应用。
✅ 一、核心理念:约定优于配置
Spring Boot 默认提供了很多“约定好的”配置,只要你引入相关依赖,它就会自动帮你完成相关配置注册。
✅ 二、自动配置的核心组件
1. @SpringBootApplication
这是一个复合注解,相当于:
@Configuration
@EnableAutoConfiguration
@ComponentScan
其中 @EnableAutoConfiguration
是自动加载的关键。
2. @EnableAutoConfiguration
作用
它会触发自动配置机制,核心逻辑是引导加载 META-INF/spring.factories
文件中声明的:
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration,\
org.springframework.boot.autoconfigure.data.jpa.JpaRepositoriesAutoConfiguration,\
...
这些类就是 Spring Boot 提供的 自动配置类(AutoConfiguration)。
3. 自动配置类的特点:
-
都是以
xxxAutoConfiguration
命名; -
本质是普通的
@Configuration
类; -
内部大量使用 条件注解 控制加载行为:
常见条件注解:
注解 | 含义说明 |
---|---|
@ConditionalOnClass | 某个类存在于 classpath 时才加载该配置类 |
@ConditionalOnMissingBean | Spring 容器中没有指定 Bean 时才加载 |
@ConditionalOnProperty | 配置文件中存在某个 key 并设置为指定值时才生效 |
@ConditionalOnBean | 某个 Bean 存在时才加载 |
@ConditionalOnWebApplication | 当前是 Web 应用时才生效 |
🧠 通过这些条件组合,实现按需加载、按模块启用,极大地减少配置负担。
✅ 三、Spring Boot 自动配置过程概览
-
启动类标注
@SpringBootApplication
-
启动加载
@EnableAutoConfiguration
-
通过
SpringFactoriesLoader
加载spring.factories
中的自动配置类 -
根据条件注解决定哪些自动配置类生效
-
自动注册符合条件的 Bean 到 Spring 容器
✅ 四、自定义自动配置(拓展)
你也可以写自己的自动配置类:
@Configuration
@ConditionalOnClass(MyService.class)
@ConditionalOnProperty(name = "my.service.enabled", havingValue = "true")
public class MyServiceAutoConfiguration {
@Bean
public MyService myService() {
return new MyService();
}
}
并在 resources/META-INF/spring.factories
中注册:
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.example.autoconfig.MyServiceAutoConfiguration
✅ 五、排除自动配置
你可以通过以下方式禁用某些自动配置类:
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
✅ 总结一句话:
Spring Boot 自动加载机制基于
@EnableAutoConfiguration
注解,结合spring.factories
与一系列条件注解,实现了模块化、按需加载、零配置启动,是 Spring Boot 快速开发能力的核心保障。