返回
SpringBoot 自动配置类的解析和过滤机制
后端
2023-11-04 09:18:06
<##title>SpringBoot 自动配置类的解析和过滤机制</#title>
三句话讲清楚SpringBoot的自动配置类的解析和过滤机制
- Spring Boot通过注解
@SpringBootApplication
开启自动配置功能。 - Spring Boot通过条件注解(
@Conditional
)和条件评估器(Condition
)来判断是否需要加载某个自动配置类。 - Spring Boot通过自动配置导入器(
AutoConfigurationImportSelector
)将满足条件的自动配置类导入到Spring IoC容器中。
自动配置类的解析
当Spring Boot应用程序启动时,Spring Boot首先会扫描类路径下的所有类,并查找带有@SpringBootApplication
注解的类。@SpringBootApplication
注解是一个组合注解,它包含了@ComponentScan
、@EnableAutoConfiguration
和@Configuration
三个注解的功能。@ComponentScan
注解用于扫描指定包下的所有类,@EnableAutoConfiguration
注解用于开启自动配置功能,@Configuration
注解用于将当前类声明为一个Spring IoC容器的配置类。
自动配置类的过滤
在扫描到所有带有@SpringBootApplication
注解的类之后,Spring Boot会对这些类进行过滤。过滤的目的是为了剔除那些不需要加载的自动配置类。Spring Boot提供了多种过滤机制,其中最常用的有两种:
- 基于条件注解的过滤:Spring Boot提供了多种条件注解,这些条件注解可以用于判断是否需要加载某个自动配置类。例如,
@ConditionalOnClass
注解用于判断某个类是否存在,@ConditionalOnBean
注解用于判断某个Bean是否存在,@ConditionalOnMissingBean
注解用于判断某个Bean不存在,@ConditionalOnExpression
注解用于判断某个表达式是否成立。 - 基于条件评估器的过滤:Spring Boot还提供了一些条件评估器,这些条件评估器可以用于判断是否需要加载某个自动配置类。例如,
ClassPathScanningCandidateComponentProvider
条件评估器用于判断某个类是否符合扫描条件,AutoConfigurationImportSelector
条件评估器用于判断某个自动配置类是否符合导入条件。
自动配置类的导入
在过滤掉不需要加载的自动配置类之后,Spring Boot会将剩下的自动配置类导入到Spring IoC容器中。自动配置类的导入是通过AutoConfigurationImportSelector
条件评估器来实现的。AutoConfigurationImportSelector
条件评估器会根据自动配置类的条件注解和条件评估器来判断是否需要导入某个自动配置类。如果某个自动配置类满足所有条件,那么AutoConfigurationImportSelector
条件评估器就会将这个自动配置类导入到Spring IoC容器中。