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;

}


ConditionalOnProperty_加载



例子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