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

     

  • 相关阅读:
    20199308 2019-2020-2 《网络攻防实践》第2周作业
    20199308 2019-2020-2 《网络攻防实践》第1周作业
    20199308《网络攻防实践》假期作业
    20199308《Linux内核原理与分析》第十二周作业
    20199308《Linux内核原理与分析》第十一周作业
    2019-2020-1 20199308《Linux内核原理与分析》第九周作业
    2019.11.13课堂实验之用Linux下的shell脚本完成两文本交替输出
    2019-2020-1 20199308《Linux内核原理与分析》第八周作业
    SQL中GROUP BY用法示例
    pyecharts实现星巴克门店分布可视化分析
  • 原文地址:https://www.cnblogs.com/dalianpai/p/11664094.html
Copyright © 2020-2023  润新知