在向应用程序加入Spring Boot时,有个名为spring-boot-autoconfigure的JAR文件,其中包含了很多配置类。
它们利用了Spring 的条件化配置,这是Spring 4.0引入的新特征。条件化配置允许配置存在应用程序中,但在满足某些条件之前都忽略这个配置。
在Spring里可以很方便地编写你自己的条件,所要做的就是实现Condition接口,覆盖它的matches()方法。
举例来说,下面这个简单的条件类只有在Classpath里存在JdbcTemplate时才会生效:
package readinglist;
import org.springframework.context.annotation.Condition;
import org.springframework.context.annotation.ConditionContext;
import org.springframework.core.type.AnnotatedTypeMetadata;
public class JdbcTemplateCondition implements Condition {
@Override
public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
try {
context.getClassLoader().loadClass("org.springframework.jdbc.core.JdbcTemplate");
return true;
} catch (Exception e) {
return false;
}
}
}
当你用Java来声明Bean的时候,可以使用这个自定义条件类:
@Bean
@Conditional(JdbcTemplateCondition.class)
public MyService myService() {
return new MyService();
}
只有当JdbcTemplateCondition 类的条件成立时才会创建MyService这个Bean。也就是说MyService Bean创建的条件是Classpath里有JdbcTemplate。否则这个Bean的声明就会被忽略掉。