返回

SpringBoot 自动配置类的解析和过滤机制

后端

<##title>SpringBoot 自动配置类的解析和过滤机制</#title>

三句话讲清楚SpringBoot的自动配置类的解析和过滤机制

  1. Spring Boot通过注解@SpringBootApplication开启自动配置功能。
  2. Spring Boot通过条件注解(@Conditional)和条件评估器(Condition)来判断是否需要加载某个自动配置类。
  3. 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容器中。