Spring中的@ConditionalOnProperty注解详解
@ConditionalOnProperty注解
条件注解分类
常见的@Conditionalxxx开头的注解我们称之为条件注解
常见的条件注解有
- class条件注解:@ConditionalOnClass
- bean条件注解:@ConditionalOnBean
- 属性条件注解:@ConditionalOnProperty
- …
这几个注解通常会结合使用,一般都是在配置类中使用,SpringBoot各种xxxxAutoCconfiguration都用到了这些注解,这也是SpringBoot自动装配的重要工具。
简单来讲,一般是在配置类上或者是@Bean修饰的方法上,添加此注解表示一个类是否要被Spring上下文加载,若满足条件则加载,若不满足条件则不加载。
我们在application.properties中配置的各种配置,添加配置之后即生效,就是这么控制的。
主要说一下这个属性matchIfMissing,该属性为true时,配置文件中缺少对应的value或name的对应的属性值,也会注入成功。
app.name=tom
配置类为
@ConditionalOnProperty(prefix = "app",name="name",matchIfMissing = false)
@Configuration
public class ConfigureOne {
public ConfigureOne() {
System.out.println("--------构造ConfigureOne---------");
}
}不配置havingValue的值
假如没有配置这个name的配置
- @ConditionalOnProperty(prefix = “app”,name=“name”,matchIfMissing = false) 假如没有配置这个name的配置,若matchIfMissing为false,则不会加载此配置类 假如配置了这个name的配置,若matchIfMissing为false,则会加载此配置类
- @ConditionalOnProperty(prefix = “app”,name=“name”,matchIfMissing = true) 假如没有配置这个name的配置,若matchIfMissing为true,则仍会加载此配置类 假如配置了这个name的配置,若matchIfMissing为true,则会加载此配置类 总结,若未配置havingValue的值,matchIfMissing为true则无论是否有配置都会加载配置类,matchIfMissing为false,有配置加载类,无配置不加载类。
配置错误的havingValue的值
- @ConditionalOnProperty(prefix = “app”,name=“name”,havingValue = “name1”,matchIfMissing = false) 假如配置了错误的name值,若matchIfMissing为false,配置类不会加载 假如配置了正确的name值,若matchIfMissing为false,配置类会加载
- @ConditionalOnProperty(prefix = “app”,name=“name”,havingValue = “name1”,matchIfMissing = true) 假如配置了错误的name值,若matchIfMissing为true,配置类不会加载 假如配置了正确的name值,若matchIfMissing为true,配置类会加载 总结,只要配置了正确的havingValue值,无论matchIfMissing怎么设置,都会加载,只要配置的havingValue值不正确,无论 matchIfMissing怎么设置,都不会加载。
到此这篇关于Spring中的@ConditionalOnProperty注解详解的文章就介绍到这了,更多相关@ConditionalOnProperty注解内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
从 Spring Boot 3+Java 21 到 Spri
本文介绍了从SpringBoot3+Java21升级到SpringBoot4+Java25的具体步骤与注意事项,主要包含环境与依赖自查、代码适配、进阶优化、测试与验证以及迁移checklist等内容,感兴趣的朋友跟随小编一起看看吧2026-04-04
Java报错Java.net.SocketTimeoutException的几种解决方法
在 Java 网络编程中,SocketTimeoutException 通常表示在进行网络操作时,等待响应的时间超过了设定的超时时间,本文将深入探讨 Java.net.SocketTimeoutException 的问题,并为开发者和环境配置者提供详细的解决方案,需要的朋友可以参考下2024-10-10
详解MyBatis的getMapper()接口、resultMap标签、Alias别名、 尽量提取sql列、动态操作
这篇文章主要介绍了详解MyBatis的getMapper()接口、resultMap标签、Alias别名、 尽量提取sql列、动态操作的相关资料,需要的朋友可以参考下2016-08-08


最新评论