美文网首页
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