Spring Boot 中的条件注解

Spring Boot条件注解的汇总:

注解作用判断依据使用场景
@ConditionalOnBean容器中存在指定Bean时,被注解的配置或Bean定义生效指定Bean在容器中存在依赖其他已存在Bean时配置相关功能
@ConditionalOnCheckpointRestore在特定检查点恢复相关条件满足时生效满足检查点恢复条件Spring Boot内部特定恢复机制场景
@ConditionalOnClass类路径下存在指定类时,相关配置或Bean定义生效指定类在类路径中存在确保依赖类存在才进行配置
@ConditionalOnCloudPlatform根据运行的云平台判断条件是否满足处于指定云平台环境针对不同云平台进行差异化配置
@ConditionalOnExpression基于SpEL表达式结果判断条件是否满足SpEL表达式计算结果为真根据灵活的表达式逻辑决定配置
@ConditionalOnJava依据当前运行的Java版本判断条件运行的Java版本符合指定范围兼容不同Java版本的配置
@ConditionalOnJndiJNDI中存在指定名称时,配置或Bean定义生效JNDI存在指定名称依赖JNDI资源进行配置
@ConditionalOnMissingBean容器中不存在指定Bean时,配置或Bean定义生效指定Bean在容器中不存在容器缺少特定Bean时提供默认配置
@ConditionalOnMissingClass类路径下不存在指定类时,配置或Bean定义生效指定类在类路径中不存在类路径缺少特定类时进行替代配置
@ConditionalOnNotWarDeployment应用不是以WAR包形式部署时,配置或Bean定义生效非WAR包部署形式非WAR包部署场景下的配置
@ConditionalOnNotWebApplication应用不是Web应用程序时,配置或Bean定义生效非Web应用程序非Web应用场景下的配置
@ConditionalOnProperty根据配置文件中的属性值判断条件配置属性值满足要求依据配置文件灵活启用或禁用配置
@ConditionalOnResource类路径下存在指定资源时,配置或Bean定义生效类路径存在指定资源依赖特定资源存在的配置
@ConditionalOnSingleCandidate容器中指定类型的Bean只有一个候选时,配置或Bean定义生效指定类型Bean为单例确保单例Bean存在时的配置
@ConditionalOnThreading基于线程相关条件判断满足线程相关条件Spring Boot内部特定线程场景
@ConditionalOnWarDeployment应用是以WAR包形式部署时,配置或Bean定义生效WAR包部署形式WAR包部署场景下的配置
@ConditionalOnWebApplication应用是Web应用程序时,配置或Bean定义生效Web应用程序Web应用场景下的配置

@ConditionalOnBean

意义:表示当容器中存在指定类型或满足特定条件的 Bean 时,才会使被注解的配置生效或创建对应的 Bean。
使用示例:
@Configuration
@ConditionalOnBean(name = "userService") 
public class SpecialConfig {// 当容器中存在名为userService的Bean时,该配置类才生效
}

@ConditionalOnClass

意义:当类路径下存在指定的类时,被注解的配置或 Bean 定义才会生效。用于确保依赖类存在时才进行相关配置。
使用示例:
@Configuration
@ConditionalOnClass(name = "org.example.SomeService") 
public class FeatureConfig {// 当类路径下存在org.example.SomeService类时,该配置类生效
}

@ConditionalOnExpression

意义:基于 SpEL(Spring 表达式语言)表达式的结果来判断条件是否满足。可以灵活地根据表达式逻辑决定配置是否生效。
使用示例
@Configuration
@ConditionalOnExpression("${app.debug:false} == true") 
public class DebugConfig {// 当配置文件中app.debug为true时,该配置类生效
}

@ConditionalOnJava

意义:根据当前运行的 Java 版本来判断条件是否满足,用于兼容不同 Java 版本的配置。

使用示例:

@Configuration
@ConditionalOnJava(range = ConditionalOnJava.Range.EQUAL_OR_NEWER, value = JavaVersion.EIGHT) 
public class Java8PlusConfig {// 当运行环境为Java 8或更高版本时,该配置类生效
}

@ConditionalOnJndi

意义:当 JNDI(Java 命名和目录接口)中存在指定的名称时,被注解的配置或 Bean 定义才会生效。
使用示例:
@Configuration
@ConditionalOnJndi(name = "java:comp/env/jdbc/myDS") 
public class JndiDataSourceConfig {// 当JNDI中存在指定名称的数据源时,该配置类生效
}

@ConditionalOnMissingBean

意义:当容器中不存在指定类型或满足特定条件的 Bean 时,才会使被注解的配置生效或创建对应的 Bean。和@ConditionalOnBean 相反。
使用示例:
@Configuration
@ConditionalOnMissingBean(UserService.class) 
public class DefaultUserServiceConfig {// 当容器中不存在UserService类型的Bean时,创建默认的UserService Bean
}

@ConditionalOnMissingClass

意义:当类路径下不存在指定的类时,被注解的配置或 Bean 定义才会生效。和@ConditionalOnClass 相反。
使用示例:
@Configuration
@ConditionalOnMissingClass(name = "org.example.ExpensiveLibrary") 
public class FallbackConfig {// 当类路径下不存在org.example.ExpensiveLibrary类时,该配置类生效
}

@ConditionalOnNotWarDeployment

意义:当应用不是以 WAR 包形式部署时,被注解的配置或 Bean 定义才会生效。
使用示例:
@Configuration
@ConditionalOnNotWarDeployment
public class NonWarDeploymentConfig {// 非WAR包部署时,该配置类生效
}

@ConditionalOnNotWebApplication

意义:当应用不是 Web 应用程序时,被注解的配置或 Bean 定义才会生效。
使用示例:
@Configuration
@ConditionalOnNotWebApplication
public class NonWebAppConfig {// 非Web应用场景下,该配置类生效
}

@ConditionalOnProperty

意义:根据配置文件中的属性值来判断条件是否满足。可用于根据配置灵活启用或禁用配置。

使用示例:
@Configuration
@ConditionalOnProperty(name = "app.feature.enable", havingValue = "true") 
public class FeatureEnableConfig {// 当配置文件中app.feature.enable属性值为true时,该配置类生效
}

@ConditionalOnResource

意义:当类路径下存在指定的资源(如文件、目录等)时,被注解的配置或 Bean 定义才会生效。
使用示例:
@Configuration
@ConditionalOnResource(resources = "classpath:config/custom.properties") 
public class CustomResourceConfig {// 当类路径下存在config/custom.properties文件时,该配置类生效
}

@ConditionalOnSingleCandidate

意义:当容器中指定类型的 Bean 只有一个候选(即单例)时,被注解的配置或 Bean 定义才会生效。
使用示例:
@Configuration
@ConditionalOnSingleCandidate(UserService.class) 
public class SingleUserServiceConfig {// 当容器中UserService类型的Bean只有一个时,该配置类生效
}

@ConditionalOnThreading

意义:基于线程相关条件判断,Spring Boot 内部特定场景使用,应用开发中较少直接用。
使用示例:
@Configuration
@ConditionalOnThreading
public class ThreadingRelatedConfig {// 满足线程相关条件时,配置生效
}

@ConditionalOnWarDeployment

意义:当应用是以 WAR 包形式部署时,被注解的配置或 Bean 定义才会生效。
使用示例:
@Configuration
@ConditionalOnWarDeployment
public class WarDeploymentConfig {// WAR包部署时,该配置类生效
}

@ConditionalOnWebApplication

意义:当应用是 Web 应用程序时,被注解的配置或 Bean 定义才会生效。
使用示例:
@Configuration
@ConditionalOnWebApplication
public class WebAppConfig {// 作为Web应用时,该配置类生效
}

@ConditionalOnCloudPlatform

意义:根据运行的云平台来判断条件是否满足,比如判断是否在特定云厂商(如 AWS、Azure 等)环境中运行,以决定配置是否生效。
使用示例:
@Configuration
@ConditionalOnCloudPlatform(value = CloudPlatform.AWS) 
public class AwsSpecificConfig {// 运行在AWS云平台时,该配置类生效
}

@ConditionalOnCheckpointRestore

意义:Spring Boot 特定场景下,基于检查点恢复相关条件判断,一般用于 Spring Boot 内部或特定恢复机制场景 ,应用开发中较少直接使用。
使用示例:
@Configuration
@ConditionalOnCheckpointRestore
public class RestoreRelatedConfig {// 满足检查点恢复条件时,配置生效
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/80882.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

leetcode11-盛水最多的容器

leetcode 11 思路 问题分析 拆解问题,面积 底 * 高 宽度:两个竖直线之间的距离,显然是 right - left高度:容器的水位受限于较短的那根竖直线的高度,所以高度为 min(height[left], height[right]) 本题其实很容易…

HTTP:十二.HTTPS

HTTPS 概述 超文本传输安全协议(英语:HyperText Transfer Protocol Secure,缩写:HTTPS;常称为HTTP over TLS、HTTP over SSL或HTTP Secure)是一种通过计算机网络进行安全通信的传输协议。HTTPS经由HTTP进行通信,利用TLS加密数据包。 HTTPS的主要目的是提供对网站服务器…

MySQL数据库(14)—— 使用C操作MySQL

目录 一,下载库 二,安装库 三,使用库 3.1 连接数据库 3.2 发送SQL 3.3 获取结果 问题:为什么不使用C? 解答:使用C的库已经可以完成绝大部分MySQL操作了,并且C的库的使用更加复杂&#xff…

Redis故障防御体系:构建七层免疫系统的设计哲学

当Redis遭遇写入阻塞或服务崩溃时,本质上是系统边界的多重防御机制被击穿。本文摒弃碎片化的解决方案,从系统工程的全局视角,构建七层递进式防御体系,揭示高可用架构的深层设计逻辑。 第一层:动态资源调度 —— 内存的…

在线文本客服系统核心功能解析

在线文本客服系统核心功能解析 在互联网大厂的Java求职者面试中,经常会被问到关于在线文本客服系统的实现和设计。本文通过一个故事场景来展示这些问题的实际解决方案。 第一轮提问 面试官:马架构,欢迎来到我们公司的面试现场。请问您对在…

学成在线。。。

一:讲师管理 介绍:可以实现对讲师的分页展示,多条件组合分页查询,对讲师的添加,修改,删除操作。 针对于添加来说,使用requestBody注解,搭配postmapping接收数据,使用service层的对象,调用mapper方法,向数据库中保存数据。 修改: 先根据讲师id,查询出讲师,再去…

Webug3.0通关笔记17 中级进阶(第01-05关)

目录 第一关 出来点东西吧 1.打开靶场 2.源码分析 3.源码修正 4.文件包含漏洞渗透 第二关 提交方式是怎样的啊? 1.打开靶场 2.源码分析 3.渗透实战 (1)bp改包法 (2)POST法渗透 第三关 我还是一个注入 1.打开…

C语言复习笔记--内存函数

在复习完字符函数和字符串函数之后,今天让我们复习一下内存函数吧.这一块的东西不太多,并且与之前的字符串函数有一些地方很相似,所以这里应该会比较轻松. memcpy使用和模拟实现 老规矩,先看函数原型 void * memcpy ( void * destination, const void * source, size_t num );…

【Unity AR开发插件】一、高效热更新:Unity AR 插件结合 HybridCLR 与 ARFoundation 的开源仓库分享

摘要 本篇博客详细介绍了我基于 HybridCLR 与 AR Foundation 的 Unity AR 开发插件,旨在为开发者提供高效的跨平台热更新方案。文章从背景与动机出发,覆盖一键安装工具、环境配置、热更新数据制作与示例程序运行等核心模块,并展示代码结构与使…

数据分析(四):Python Pandas数据输入输出全流程指南

Python Pandas数据输入输出全流程指南 1. 引言 数据输入输出(I/O)是数据分析工作流中最基础也是最重要的环节之一。Pandas提供了丰富的数据读写接口,支持从各种文件格式和数据库中加载数据,以及将处理后的数据保存到不同存储系统中。本文将全面介绍Pan…

人工智能与机器学习:Python从零实现性回归模型

🧠 向所有学习者致敬! “学习不是装满一桶水,而是点燃一把火。” —— 叶芝 我的博客主页: https://lizheng.blog.csdn.net 🌐 欢迎点击加入AI人工智能社区! 🚀 让我们一起努力,共创AI未来! 🚀 前言 在 AI 的热潮中,很容易忽视那些让它得以实现的基础数学和技…

Ubuntu18.04更改时区(图文详解)

Ubuntu18.04更改时区 1、前言2、更改时区3、总结 1、前言 记录一下Ubuntu18.04更改时区的过程,方便自己日后回顾,也可以给有需要的人提供帮助。 2、更改时区 输入下面的指令,进行时区选择 tzselect输入4选择亚洲,输入9选择中…

vue2 项目使用vite2 升级 vite4 后,对别名的解析有问题,导致打包后项目无法正常运行

问题描述: 之前使用的 vite2 版本,需要在 vite.config 里配置 vue 别名,不然会有commonjs 的依赖包找不到 vue,因为 vite 默认使用 esm 版本。 vue: vue/dist/vue.common.prod.js 在 vite2 中可以正常进行打包上线,…

民办生从零学C的第十二天:指针(1)

每日励志:拼搏十年,征战沙场,不忘初心,努力成为一个浑身充满铜臭味的有钱人。 一.内存和地址 1.内存 计算机内存是一系列存储单元的集合,每个存储单元都有唯一的地址来标识。这些存储单元用于存储程序的数据和指令。…

用Postman验证IAM Token的实际操作

当我们需要用Postman发送一个最简单的请求去验证Token的时候我们该怎么办? 【一、步骤】 步骤1:打开Postman,新建一个GET请求 请求地址填: https://iam.cn-north-4.myhuaweicloud.com/v3/auth/projects 解释一下:…

关于常量指针和指向常量的指针

关于指针,对于常量指针和指向常量的指针也是傻傻分不清。看到定义时,不知道是指针不能变,还是指针指向的内容不能变量。 先看形式: const char * A; char * const B; 这两种有什么区别?傻傻分不清。 A这种定义&am…

unity 读取csv

1.读取代码 string filePath Application.streamingAssetsPath "\\data.csv"; public List<MovieData> movieData new List<MovieData>(); private void ReadCSV(string filePath) { List<List<string>> data new List<…

安达发|高效智能塑料切割数控系统 - 全自动化软件解决方案

在当今的制造业中&#xff0c;塑料作为一种轻便、耐用且成本效益高的材料&#xff0c;被广泛应用于各个领域。随着科技的进步和市场需求的变化&#xff0c;塑料加工行业正面临着前所未有的挑战和机遇。为了提高生产效率&#xff0c;降低成本&#xff0c;并满足日益严格的质量标…

c#接口_抽象类_多态学习

c#接口_抽象类_多态学习 学习日志 关于&#xff1a;c#接口_抽象类_多态的学习记录。 一、概念 1. 多态&#xff08;Polymorphism&#xff09; 定义&#xff1a;同一操作作用于不同对象时&#xff0c;表现出不同的行为。实现方式&#xff1a; 继承 方法重写&#xff08;ov…

智能硬件行业售后服务管理:提升客户体验的关键所在

在当今数字化浪潮的推动下&#xff0c;智能硬件行业正以前所未有的速度蓬勃发展。从智能家居设备的普及&#xff0c;到智能穿戴产品的多样化&#xff0c;再到智能办公设备的广泛应用&#xff0c;智能硬件已经深入到我们生活的方方面面。据市场研究机构预测&#xff0c;未来几年…