- @Conditional 是Spring4 版本新提供的注解,它的作用是按照设定的条件进行判断,把满足判断条件的 bean 注册到 Spring 容器。可以根据代码中设置的条件装载不同的 bean,符合条件则加载该 bean,不符合则不加载该 bean
参数 |
描述 |
value |
指定实现 Condition 接口类的数组,默认为{} 注 指定的所有 Condition 接口类需要实现 matches 方法,返回 true 则注入 bean,false 则不注入。 |
- 可以通过实现Condtional接口类,自定Condtional类进行判断
示例
- MyConditional.java
public class WindowsConditional implements Condition { @Override public boolean matches(ConditionContext conditionContext, AnnotatedTypeMetadata annotatedTypeMetadata) { Environment environment = conditionContext.getEnvironment(); String property = environment.getProperty("os.name"); if(property.contains("Windows")){ return true; } return false; } } |
- PersonConfigure.java
@Configuration
// @Conditional({WindowsConditional.class})
public class PersonConfigure {
@Bean(name="bill")
@Conditional({WindowsConditional.class}) //如果满足MyConditional返回true,继续加载下面这个方法
public Person person1(){
return new Person("Bill Gates",62);
}
@Bean(name="linus")
@Conditional({WindowsConditional.class}) //如果满足MyConditional返回true,继续加载下面这个方法
public Person person2(){
return new Person("Linus",62);
}
}
- PersonConfigure.java
@Configuration
@Conditional({WindowsConditional.class})
public class PersonConfigure {
@Bean(name="bill")
public Person person1(){
return new Person("Bill Gates",62);
}
@Bean(name="linus")
public Person person2(){
return new Person("Linus",62);
}
}
注
- @Conditional 中的多个 Condition 都需要都满足,才会加载被注解的类
- @Conditional 可以作用在方法上,也可以作用在类上。如果是类和方法都加了 @Conditional 注解,最终在方法上的注解为最终的条件,如果返回 true 则加入容器,反之不会加入容器。如果只是类上加了 @Conditional 注解,整个类的所有方法都会加入容器中。