Condition
Profile是个好东西。通过Profile,我们可以非常方便地条件化Bean的创建,动态调整应用程序的功能。可是,Profile只能做些简单的条件化,对于复杂一点的条件化Profile是无法胜任的。比如现有这样的数据源创建需求:
1.如果类路径存在DBCP的JAR包,则创建DBCP提供的BasicDataSource数据源。
2.如果类路径没有DBCP的JAR包,则创建Spring提供的DriverManagerDataSource数据源。
毫无疑问,这样的需求Profile是实现不了的。要想实现这样的需求,还得仰赖Spring提供的,专门用于Bean的条件化创建的,功能远比Profile强大的Condition。而这,需要我们做好两件事情:
1.实现Condition接口,以描述Bean的创建条件。
2.往配置方法添加@Conditional注解,告诉Spring容器创建Bean时以某个实现了Condition接口的类作为条件。
Condition接口签名如下:
1 @FunctionalInterface 2 public interface Condition { 3 boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata); 4 }