美文网首页
SpringBoot中的Conditional之Conditio

SpringBoot中的Conditional之Conditio

作者: 小丸子的呆地 | 来源:发表于2021-07-09 09:33 被阅读0次

    ConditionalOnProperty是用来根据配置文件中的信息的配置情况,选择是否加载当前配置类的注解。

    @Retention(RetentionPolicy.RUNTIME)
    @Target({ ElementType.TYPE, ElementType.METHOD })
    @Documented
    @Conditional(OnPropertyCondition.class)
    public @interface ConditionalOnProperty {
    
        /**
         * name字段别名
         */
        String[] value() default {};
    
        /**
         * 应该应用于每个属性的前缀。如果未指定,前缀会自动以点结尾。
         * 有效前缀由一个或多个用点分隔的单词定义(例如 {@code "acme.system.feature"})。
         */
        String prefix() default "";
    
        /**
         * 要测试的属性的名称。如果已定义前缀,则将其应用于计算每个属性的完整键。
         * 例如,如果前缀是 {@code app.config} 并且一个值是 {@code my-value},
         * 则完整键将是 {@code app.config.my-value} 使用虚线表示法指定每个属性都是小写的,
         * 用“-”分隔单词(例如 {@code my-long-property})。
         */
        String[] name() default {};
    
        /**
         * 属性的预期值的字符串表示形式。如果未指定,则该属性必须不等于false。
         */
        String havingValue() default "";
    
        /**
         * 如果未设置属性,则指定条件是否应匹配。默认为 {@code false}。
         */
        boolean matchIfMissing() default false;
    
    }
    

    使用方法

    1. name和value不能都为空,也不能都有值;
    2. 如果配置了prefix,在匹配时的属性名为prefix+name;
    3. 如果配置文件(eg: application.yml)中不包含属性名name,且matchIfMissing为false,返回false;
    4. 如果配置文件(eg: application.yml)中不包含属性名name,且matchIfMissing为true,返回true;
    5. 如果配置文件(eg: application.yml)中包含属性名name,且配置了havingValue,比较属性名name对应的属性值和havingValue是否相等,相等返回true,否则返回false;
    6. 如果配置文件(eg: application.yml)中包含属性名name,且没有配置havingValue,比较属性名name对应的属性值是否等于字符串false,相等返回false,否则返回true;
    7. 循环以上判断,有一项为false,则@Conditional不成立。这不会加载这个配置项。

    相关文章

      网友评论

          本文标题:SpringBoot中的Conditional之Conditio

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