Spring4引入了一个新的@Conditional注解,它可以用到带有@Bean注解的方法上。如果给定的条件计算结果为true,就会创建这个bean,否则的话,这个bean会被忽略。
@Bean
@Conditional(MagicExistsCondition.class)
public MagicBean magicBean(){
return new MagicBean();
}
可以看到,@Confitional中给定了一个Class,它指明了条件,在上面例子中也就是MagicExistsCondition。@Conditional将会通过Condition接口进行条件对比。
public inteface condition{
boolean matches(ConditionContext ctxt,
AnnotatedTypeMetadata metadata);
}
设置给@Conditional的类可以是任意实现了Condition接口的类型。如果matches()方法返回true,那么就会创建歹有@Conditional注解的bean。如果matches()方法返回false,将不会创建这些bean。
借助isAnnotated()方法,我们能够判断带有@Bean注解的方法是不是还有其他特定的注解。借助其他的那些方法,我们能够检查@Bean注解的方法上其他注解的属性。