美文网首页
ConditionalOnProperty详解

ConditionalOnProperty详解

作者: 全都是泡沫啦 | 来源:发表于2019-03-21 11:21 被阅读0次
    package org.springframework.boot.autoconfigure.condition;
    
    import java.lang.annotation.Documented;
    import java.lang.annotation.ElementType;
    import java.lang.annotation.Retention;
    import java.lang.annotation.RetentionPolicy;
    import java.lang.annotation.Target;
    
    import org.springframework.context.annotation.Conditional;
    import org.springframework.core.env.Environment;
    
    @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;
    }
    
    //只要nonMatching和missing存在数据就表示不匹配
           private void collectProperties(PropertyResolver resolver, List<String> missing,
                    List<String> nonMatching) {
                for (String name : this.names) {
                    String key = this.prefix + name;
                    if (resolver.containsProperty(key)) {
                        if (!isMatch(resolver.getProperty(key), this.havingValue)) {
                            nonMatching.add(name);
                        }
                    }
                    else {
    //matchIfMissing false:对于不存在于配置文件的属性加入missing.
    //matchIfMissing true:对于不存在于配置文件的属性跳过
                        if (!this.matchIfMissing) {
                            missing.add(name);
                        }
                    }
                }
            }
    //havingValue(默认为空)如果存在就与value忽略大小写比较
    //havingValue不存在只要value不等于false就算匹配
            private boolean isMatch(String value, String requiredValue) {
                if (StringUtils.hasLength(requiredValue)) {
                    return requiredValue.equalsIgnoreCase(value);
                }
                return !"false".equalsIgnoreCase(value);
            }
    

    相关文章

      网友评论

          本文标题:ConditionalOnProperty详解

          本文链接:https://www.haomeiwen.com/subject/btfqvqtx.html