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() {