Spring Boot 的自动配置是指 Spring Boot 能够根据类路径中的jar依赖、定义的bean以及各种属性设置,自动配置应用的过程。
自动配置的目标是减少开发者在开始一个新项目或者给现有项目添加新特性时的工作量,同时避免需要使用大量的配置。Spring Boot 通过在应用的启动阶段应用一些"约定优于配置"的原则来实现这一点。
具体来说,自动配置涉及以下主要步骤和组件:
1. Spring Factories Loader
Spring Boot 使用 Spring Factories Loader 来加载 META-INF/spring.factories
文件中列出的所有配置类。这个文件通常位于您项目依赖的jar包里。Spring Boot 自己也提供了一个 spring.factories
文件,并在其中列出了大量自动配置类。
2. 条件注解(@Conditional)
自动配置类使用了大量的条件注解,如 @ConditionalOnClass
, @ConditionalOnMissingBean
, @ConditionalOnProperty
等,这些注解决定了在何种条件下自动配置类的某个特定部分应该被应用。
3. 配置类(@Configuration)
自动配置类本身标注有 @Configuration
,表示它们是配置类和bean定义的容器。基于条件注解的评估,这些类中的 @Bean
方法可以条件性地创建并注册bean到Spring应用上下文中。
例如,如果 spring-boot-starter-web
依赖位于应用的类路径中,Spring Boot 自动配置将会配置一个嵌入式的Tomcat服务器,以及设置适合于Web应用的Spring MVC。
4. 配置属性(@ConfigurationProperties)
通过将 @ConfigurationProperties
注解到类上,可以将配置文件中的属性绑定到一个对象上。这允许开发者以类型安全的方式访问配置属性。
自动配置的处理流程
当你启动一个 Spring Boot 应用时,会触发自动配置过程。Spring Boot 会使用所有可用的自动配置类来配置应用。以下是一个简化的工作流程:
- Spring 应用上下文启动。
- 检查在
spring.factories
文件中声明的自动配置类。 - 使用
@Conditional
相关注解来判断哪些自动配置是有效的。 - 应用有效的自动配置来初始化和配置Spring Beans。
使用 @SpringBootApplication
注解
在 Spring Boot 应用的入口类上,通常会有 @SpringBootApplication
注解,这个注解组合了 @Configuration
, @EnableAutoConfiguration
和 @ComponentScan
。其中,@EnableAutoConfiguration
注解是告诉 Spring Boot 启动自动配置的关键。
这种快速、自动的配置让开发者可以很快地搭建原型和扩展已有服务,同时也给予了充足的灵活性通过 application.properties
或 application.yml
文件,或者自定义 @Configuration
类来修改默认行为。