@ConditionalOnProperty注解

一 源码解析

查看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也会正常加载;反之报错  

三 用法

通过其两个属性name以及havingValue来实现的,其中name用来从application.properties中读取某个属性值。

如果该值为空,则返回false; 如果值不为空,则将该值与havingValue指定的值进行比较,

如果一样则返回true;否则返回false。 如果返回值为false,则该configuration不生效;为true则生效。

四 举例

 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这个注解,常常用来判断配置文件中是否有相应的配置,有则注入容器,无则不注入。

 

原文地址:https://www.cnblogs.com/dalianpai/p/11664094.html