ConditionalOnProperty
@Retention(RetentionPolicy.RUNTIME)
@Target({ ElementType.TYPE, ElementType.METHOD })
@Documented
@Conditional(OnPropertyCondition.class)
public @interface ConditionalOnProperty {
/**
* Alias for {@link #name()}.
* @return the names
*/
String[] value() default {};
// 属性前缀 可以没有
String prefix() default "";
String[] name() default {};
// 属性的值与havingValue指定的值相等,才加载
// 不指定,只要havingValue不等于false,其他都加载
String havingValue() default "";
// matchIfMissing=true 属性不存在,可以加载
// matchIfMissing=false 属性不存在,不可以加载
boolean matchIfMissing() default false;
}
例子1
@ConditionalOnProperty("my.bean.load")
@Bean
public MyBean getMyBean(){
MyBean bean = new MyBean();
bean.setId(1L);
bean.setName("hello");
return bean;
}
测试结果
# 可以加載
my.bean.load=
my.bean.load=true
my.bean.load=""
my.bean.load=0
# 不能加載
my.bean.load=false
例子2
指定的值与havingValue相等,才加载
@ConditionalOnProperty(value = "my.bean.load",havingValue = "true")
@Bean
public MyBean getMyBean(){
MyBean bean = new MyBean();
bean.setId(1L);
bean.setName("hello");
return bean;
}
测试结果
# 可以加载
my.bean.load=true
# 不能加载
my.bean.load=0
my.bean.load=1
matchIfMissing
@ConditionalOnProperty(value = "my.bean.load",matchIfMissing=true)
@Bean
public MyBean getMyBean(){
MyBean bean = new MyBean();
bean.setId(1L);
bean.setName("hello");
return bean;
}
# matchIfMissing=true
属性不存在,可以加载
# matchIfMissing=false
属性不存在,不可以加载
prefix
在这里value和name是同义词
@ConditionalOnProperty(prefix = "my",value = "bean.load")
@Bean
public MyBean getMyBean(){
MyBean bean = new MyBean();
bean.setId(1L);
bean.setName("hello");
return bean;
}
@ConditionalOnProperty(prefix = "my",name = "bean.load")
@Bean
public MyBean getMyBean(){
MyBean bean = new MyBean();
bean.setId(1L);
bean.setName("hello");
return bean;
}
# 上面两个效果是一样的
# 可以加載
my.bean.load=
my.bean.load=true
my.bean.load=""
my.bean.load=0
# 不能加載
my.bean.load=false