Positive matches

Negative matches

分析

可以看到,后台输出的自动配置信息特别多,好几页屏幕,没办法一一分析,在这里选择一个postive match和negative match进行分析。

Spring Boot通过配置信息指出:特定配置项被选中的原因、列出匹配到对应类的配置项(positive match)、不包括某个配置项的原因(negative match)。现在以 DataSourceAutoConfiguration 举例说明:

  • @ConditionalOnClass 表示对应的类在classpath目录下存在时,才会去解析对应的配置文件,对于DataSourceAutoConfiguration来说就是指:只有javax.sql.DataSource和org.springframwork.jdbc.datasource.embedded.EmbeddedDatabaseType类都能存在时,就会配置对应的 数据库 资源。
  • @ConditionalOnMisssingClass 表示对应的类在classpath目录下找不到。
  • OnClassCondition 用于表示匹配的类型(postive or negative)

OnClassCondition 是最普遍的浏览探测条件,除此之外,Spring Boot也使用别的探测条件,如: OnBeanCondition 用于检测指定bean实例存在与否、 OnPropertyCondition 用于检查指定属性是否存在等等。

符合 negative match 代表一些配置类(xxxConfiguration之类的),它们虽然存在于classpath目录,但是修饰它们的注解中依赖的其他类不存在。导入如果在pom文件中导入 spring-boot-autoconfigure 包,则 GsonAutoConfiguration 就会出现在classpath目录下,但是该配置类被 @ConditionalOnClass(Gson.class) 修饰,而 com.google.gson.Gson 类不在classpath目录。

@Configuration
@ConditionalOnClass({Gson.class})
public class GsonAutoConfiguration {
    public GsonAutoConfiguration() {