在Spring的IOC环境下,如果你希望bean在符合某种条件下才创建,如: 类路径下包含特定的库时创建,某个特定的bean声明了之后创建,或者是特定的环境变量设置的情况下创建。
为了简化实现该功能,Spring4引入了@Conditional注解,它可以用到带有@Bean注解的方法上。如果给定的条件计算结果为true,就创建改bean,否则就被忽略。
程序清单1.1
@Bean
@Conditional(CarCondition.class)
public Car carBean(){
return new Car();
}
在@Conditional中给定了一个条件Class---CarConditiona.class。
@Conditional将通过Condition接口进行条件对比:
这个接口只需要实现matches方法,如果返回为true,就创建带@Conditional注解的bean,如果返回为false,则不创建。
程序清单1.2
public class CarCondition implements Condition {
@Override
public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
String score = context.getEnvironment().getProperty("score");
if(score.equals("100")) return true;
return false;
}
}
CarCondition条件Class代表如果环境变量中存在score的值并且等于“100”则创建Car对象(如果得满分100,就有汽车O(∩_∩)O~)。
可以深入理解ConditionContext和AnnotatedTypeMetadata对象。