控制配置文件是否生效之@ConditionalOnProperty

文章目录

  • 前言
  • @ConditionalOnProperty使用方法
  • @ConditionalOnProperty源码
    • 属性含义
  • 使用逻辑
    • demo
      • 属性值不是boolean类型
      • 属性值为boolean类型

前言

避免重复造轮子,就要自己动手写一下公共组件,或者公共类对外提供插件功能。有时候会有用不到的的一些配置类,想通过一个配置来实现开关。
问题来了,该怎么通过配置文件来实现是否注入呢?

今天的主角@ConditionalOnProperty就是用来实现这一目的的。

@ConditionalOnProperty使用方法

在S p r i n g B o o t中有的时候需要控制配置类是否生效,可以用我们的@ConditionalOnProperty注解来标记@Configuration是否生效.

具体代码如下:

@Configuration
@ConditionalOnProperty(name = MQVenderCS.YML_VENDER_KEY, havingValue = MQVenderCS.RABBIT_MQ)
public class RabbitMQBeanProcessor implements 		  BeanDefinitionRegistryPostProcessor {
// TODO 具体的代码及逻辑实现
}

@ConditionalOnProperty源码

@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;
}

属性含义

我们来看一下各个属性的含义是什么

value:他是用来获取对应property名称的值,但是,与name不可同时使用

prifix:他是配置属性名称的前缀

name:他有两个注意事项,分别如下:
1)、配置属性的完整名称或者是部分名称;
2)、可与prefix组合使用,组成完整的配置属性名称,与value不可同时使用

havingValue: 他可以与name组合使用,比较获取到的属性值与havingValue给定的值是否相同,相同才会去加载配置

matchIfMissing:缺少该配置属性时是否可以加载。如果为true,没有该配置属性时也会正常加载;反之则不会生效

使用逻辑

havingValue为空的时候:

属性值为boolean类型,则属性值为true 加载该bean,属性值为false 不加载该bean。

如果属性值不为boolean类型,则有该属性 则加载bean,没有该属性则不加载。

demo

属性值不是boolean类型

@Configuration
@ConditionalOnProperty(name = aaa)
public class RabbitMQBeanProcessor implements 		  BeanDefinitionRegistryPostProcessor {
// TODO 具体的代码及逻辑实现
}

配置了该属性,则就会去加载
aaa=不为空

属性值为boolean类型

@Configuration
@ConditionalOnProperty(name = enable)
public class RabbitMQBeanProcessor implements BeanDefinitionRegistryPostProcessor {
// TODO 具体的代码及逻辑实现
}

enable = true
当enable为true的时候加载,当他为false的时候则不加载

欢迎大家点击下方卡片,关注《coder练习生》

你可能感兴趣的:(java,java,开发语言)