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

@ConditionalOnProperty是SpringBoot中用于控制配置类是否生效的注解,它可以根据属性值决定是否注入bean。通过指定name、prefix、havingValue等属性,可以灵活地基于配置文件的值来决定组件是否加载。当havingValue为空且属性为非boolean类型时,只要有该属性就会加载bean;若为boolean类型,则true加载,false不加载。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

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

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

@ConditionalOnProperty使用方法

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

具体代码如下:

@Configuration
@ConditionalOnProperty(name = mqVender.mq_info, havingValue = "rabbitMq")
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:他会读取application.yml文件中的配置(mqVender.mq_info)的内容,他有两个注意事项,分别如下:
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练习生》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ybb_ymm

你的鼓励会是对我最大的支持

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值