在别人的项目中看到这个注解,通过查官方文档终于弄明白了。
@Retention(RetentionPolicy.RUNTIME)
@Target({ ElementType.TYPE, ElementType.METHOD })
@Documented
@Conditional(OnPropertyCondition.class)
public @interface ConditionalOnProperty {
String[] value() default {};
String prefix() default "";
String[] name() default {};
String havingValue() default "";
boolean matchIfMissing() default false;
}
Conditional 一般配合configuration使用,可以控制是否让字段或者类在项目中生效。一般我们主要使用name和havingValue属性。name用来从application.properties中读取某个属性值,如果该值为空,则返回false;如果值不为空,则将该值与havingValue指定的值进行比较,如果一样则返回true;否则返回false。如果返回值为false,则该configuration不生效;为true则生效。
其中havingValue的值一般是
Property Value | havingValue="" | havingValue=“true” | havingValue=“false” | havingValue=“foo” |
---|---|---|---|---|
true | yes | yes | no | no |
false | no | no | yes | no |
foo | yes | no | no | yes |