Spring中的@ConditionalOnProperty注解详解

 更新时间:2024年01月18日 10:14:22   作者:岸河  
这篇文章主要介绍了Spring中的@ConditionalOnProperty注解详解,常见的@Conditionalxxx开头的注解我们称之为条件注解,常见的条件注解有,简单来讲,一般是在配置类上或者是@Bean修饰的方法上,添加此注解表示一个类是否要被Spring上下文加载,需要的朋友可以参考下

@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的配置

  1. @ConditionalOnProperty(prefix = “app”,name=“name”,matchIfMissing = false) 假如没有配置这个name的配置,若matchIfMissing为false,则不会加载此配置类 假如配置了这个name的配置,若matchIfMissing为false,则会加载此配置类
  2. @ConditionalOnProperty(prefix = “app”,name=“name”,matchIfMissing = true) 假如没有配置这个name的配置,若matchIfMissing为true,则仍会加载此配置类 假如配置了这个name的配置,若matchIfMissing为true,则会加载此配置类 总结,若未配置havingValue的值,matchIfMissing为true则无论是否有配置都会加载配置类,matchIfMissing为false,有配置加载类,无配置不加载类。

配置错误的havingValue的值

  1. @ConditionalOnProperty(prefix = “app”,name=“name”,havingValue = “name1”,matchIfMissing = false) 假如配置了错误的name值,若matchIfMissing为false,配置类不会加载 假如配置了正确的name值,若matchIfMissing为false,配置类会加载
  2. @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 到 Spring Boot 4+Java 25迁移全指南与注意事项

    从 Spring Boot 3+Java 21 到 Spri

    本文介绍了从SpringBoot3+Java21升级到SpringBoot4+Java25的具体步骤与注意事项,主要包含环境与依赖自查、代码适配、进阶优化、测试与验证以及迁移checklist等内容,感兴趣的朋友跟随小编一起看看吧
    2026-04-04
  • Java 判断数组是否相等的方法示例

    Java 判断数组是否相等的方法示例

    这篇文章主要介绍了Java 判断数组是否相等的方法示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-09-09
  • java原码补码反码关系解析

    java原码补码反码关系解析

    这篇文章主要为大家详细介绍了java原码补码反码的关系,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-02-02
  • Spring 框架中拦截器与过滤器的区别及拦截器使用详解

    Spring 框架中拦截器与过滤器的区别及拦截器使用详解

    过滤器和拦截器在Spring开发中各有优势,过滤器适用于处理通用的请求处理任务,而拦截器更适合与业务逻辑紧密相关的操作,本文给大家介绍Spring 框架中拦截器与过滤器的区别及拦截器使用详解,感兴趣的朋友一起看看吧
    2025-06-06
  • Java排序算法中的选择排序算法实现

    Java排序算法中的选择排序算法实现

    这篇文章主要介绍了Java排序算法中的选择排序算法实现,选择排序算法的实现思路类似插入排序,分已排序区间和未排序区间,选择排序每次会从未排序区间中找到最小(大)的元素,将其放到已排序区间的末尾,需要的朋友可以参考下
    2023-12-12
  • Java报错Java.net.SocketTimeoutException的几种解决方法

    Java报错Java.net.SocketTimeoutException的几种解决方法

    在 Java 网络编程中,SocketTimeoutException 通常表示在进行网络操作时,等待响应的时间超过了设定的超时时间,本文将深入探讨 Java.net.SocketTimeoutException 的问题,并为开发者和环境配置者提供详细的解决方案,需要的朋友可以参考下
    2024-10-10
  • Java获取当前时间的时间戳方法总结

    Java获取当前时间的时间戳方法总结

    Java中获取时间戳的方式有很多种,下面这篇文章主要给大家介绍了关于Java获取当前时间的时间戳的相关资料,文中通过代码介绍的非常详细,对大家学习或者使用java具有一定的参考借鉴价值,需要的朋友可以参考下
    2024-06-06
  • Java本地部署DeepSeek的详细步骤

    Java本地部署DeepSeek的详细步骤

    本文主要介绍了使用Java在本地部署DeepSeek的详细步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-10-10
  • 解决Mybatis plus实体类属性与表字段不一致的问题

    解决Mybatis plus实体类属性与表字段不一致的问题

    这篇文章主要介绍了Mybatis plus实体类属性与表字段不一致解决方法,文末给大家提到了Mybatis-plus中数据库表名和表字段名的相关知识,需要的朋友可以参考下
    2022-07-07
  • 详解MyBatis的getMapper()接口、resultMap标签、Alias别名、 尽量提取sql列、动态操作

    详解MyBatis的getMapper()接口、resultMap标签、Alias别名、 尽量提取sql列、动态操作

    这篇文章主要介绍了详解MyBatis的getMapper()接口、resultMap标签、Alias别名、 尽量提取sql列、动态操作的相关资料,需要的朋友可以参考下
    2016-08-08

最新评论