一、自动配置类的发现
- Spring Boot 会扫描类路径下的META-INF/spring.factories文件。这个文件中包含了许多配置信息,其中关键的是org.springframework.boot.autoconfigure.EnableAutoConfiguration的配置。
- 这个文件中会列出一系列的自动配置类的全限定名,这些自动配置类是 Spring Boot 根据不同的场景和依赖提供的配置类。例如,当在项目中添加了spring-boot-starter-web依赖时,spring.factories文件中对应的自动配置类就会被发现。
二、条件注解的使用
- Spring Boot 广泛使用了@Conditional注解及其派生注解,如@ConditionalOnClass、@ConditionalOnBean、@ConditionalOnMissingBean、@ConditionalOnProperty等。
- @ConditionalOnClass:当类路径下存在指定的类时,该自动配置类才会生效。例如,对于数据库自动配置,如果类路径下有DataSource类,相应的自动配置类可能会被启用。
@Configuration
@ConditionalOnClass(DataSource.class)
public class DataSourceAutoConfiguration {
}
- @ConditionalOnBean:当容器中存在指定的 Bean 时,配置才会生效。比如,如果容器中已经有了一个DataSource Bean,另一个依赖于DataSource的自动配置类可能会被启用。