一 源码解析
查看ConditionalOnProperty的源码
1 package org.springframework.boot.autoconfigure.condition; 2 3 import java.lang.annotation.Documented; 4 import java.lang.annotation.ElementType; 5 import java.lang.annotation.Retention; 6 import java.lang.annotation.RetentionPolicy; 7 import java.lang.annotation.Target; 8 import org.springframework.context.annotation.Conditional; 9 10 @Retention(RetentionPolicy.RUNTIME) 11 @Target({ElementType.TYPE, ElementType.METHOD}) 12 @Documented 13 @Conditional({OnPropertyCondition.class}) 14 public @interface ConditionalOnProperty { 15 String[] value() default {}; 16 17 String prefix() default ""; 18 19 String[] name() default {}; 20 21 String havingValue() default ""; 22 23 boolean matchIfMissing() default false; 24 }
二 说明
String[] value() default {}; //数组,获取对应property名称的值,与name不可同时使用 String prefix() default "";//property名称的前缀,可有可无 String[] name() default {};//数组,property完整名称或部分名称(可与prefix组合使用,组成完整的property名称),与value不可同时使用 String havingValue() default "";//可与name组合使用,比较获取到的属性值与havingValue给定的值是否相同,相同才加载配置 boolean matchIfMissing() default false;//缺少该property时是否可以加载。如果为true,没有该property也会正常加载;反之报错
三 用法
四 举例
1 public class WebMvcAutoConfiguration { 2 public static final String DEFAULT_PREFIX = ""; 3 public static final String DEFAULT_SUFFIX = ""; 4 private static final String[] SERVLET_LOCATIONS = new String[]{"/"}; 5 6 public WebMvcAutoConfiguration() { 7 } 8 9 @Bean 10 @ConditionalOnMissingBean({HiddenHttpMethodFilter.class}) 11 @ConditionalOnProperty( 12 prefix = "spring.mvc.hiddenmethod.filter", 13 name = {"enabled"}, 14 matchIfMissing = true 15 ) 16 public OrderedHiddenHttpMethodFilter hiddenHttpMethodFilter() { 17 return new OrderedHiddenHttpMethodFilter(); 18 } 19 20 @Bean 21 @ConditionalOnMissingBean({FormContentFilter.class}) 22 @ConditionalOnProperty( 23 prefix = "spring.mvc.formcontent.filter", 24 name = {"enabled"}, 25 matchIfMissing = true 26 )
。。。。。
五 总结
其实Spring底层有很多ConditionalXXXX的注解,用来判断类的注入,ConditionalOnProperty这个注解,常常用来判断配置文件中是否有相应的配置,有则注入容器,无则不注入。