运用场景
在手写springBoot自定义starter时,用到@ConditionalOnProperty注解,给大家聊下。
注解解释
SpringBoot通过@ConditionalOnProperty来控制Configuration配置是否生效。
源码解析
@Retention(RetentionPolicy.RUNTIME)
@Target({ ElementType.TYPE, ElementType.METHOD })
@Documented
@Conditional(OnPropertyCondition.class)
public @interface ConditionalOnProperty {
/**
* String数组 该属性与下面的 name 属性不可同时使用,
* 当value所对应配置文件中的值为false时,注入不生效,不为fasle注入生效
* value有多个值时,只要有一个值对应为false,则注入不成功
*/
String[] value() default {};
/**
* 配置文件中key的前缀,可与value 或 name 组合使用
*/
String prefix() default "";
/**
* 与 value 作用一致
*/
String[] name() default {};
/**
* 与value或name组合使用,只有当value或name对应的值与havingValue的值相同时,注入生效
*/
String havingValue() default "";
/**
* 配置中缺少对应的属性时,是否可以被注入;为true时缺少对应配置可注入
*/
boolean matchIfMissing() default false;
}