@ConditionalOnBean、@ConditionalOnMissingBean、@ConditionalOnClass

一、@ConditionalOnBean

@ConditionalOnBean 是 Spring Boot 中的一个条件注解,用于在 Spring 容器中存在指定类型的 Bean 时才会生效

具体解释如下:

  1. 当使用 @ConditionalOnBean 注解在某个配置类或 Bean 的声明上时,Spring Boot 会检查 Spring 容器中是否存在指定类型的 Bean。
  2. 如果 Spring 容器中存在指定类型的 Bean,则被注解的配置类或 Bean 才会生效,也就是说相关的配置或 Bean 会被加载进 Spring 容器。
  3. 如果 Spring 容器中不存在指定类型的 Bean,则被注解的配置类或 Bean 不会生效,相关的配置或 Bean 不会被加载进 Spring 容器。

这个注解通常用于在某个 Bean 存在的前提下才加载另外一些相关的配置或 Bean,以实现根据已有的 Bean 进行条件化加载其他配置或 Bean。它可以帮助实现依赖于其他 Bean 存在与否的功能。

二、@ConditionalOnMissingBean

@ConditionalOnMissingBean是Spring Boot中的一个条件注解,用于在容器中注册Bean时进行条件判断。它的作用是,当某个特定类型的Bean没有在容器中注册时,才会创建并注册指定的Bean。

具体解释如下:

  1. 当使用@ConditionalOnMissingBean注解在一个Bean的声明上时,Spring Boot会检查容器中是否已经存在该类型的Bean。
  2. 如果容器中不存在该类型的Bean,则Spring Boot会创建并注册被注解的Bean。
  3. 如果容器中已经存在该类型的Bean,则被注解的Bean不会被创建和注册,因为已经有其他Bean提供了相同的功能。

这个注解在很多场景下非常有用,例如可以用于给某个Bean提供默认的实现,但如果用户自定义了相同类型的Bean,则使用用户自定义的Bean,以实现在不同条件下的灵活配置。

三、@ConditionalOnClass

@ConditionalOnClass 是 Spring Boot 中的一个条件注解,用于在特定类存在于 Classpath(类路径)上时,才会生效。

具体解释如下:

  1. 当使用 @ConditionalOnClass 注解在某个配置类或 Bean 的声明上时,Spring Boot 会检查 Classpath(类路径)上是否存在该注解中指定的类。
  2. 如果 Classpath 上存在该类,则被注解的配置类或 Bean 才会生效,也就是说相关的配置或 Bean 会被加载进 Spring 容器。
  3. 如果 Classpath 上不存在该类,则被注解的配置类或 Bean 不会生效,相关的配置或 Bean 不会被加载进 Spring 容器。

这个注解通常用于在某些特定依赖或条件下才加载相关配置或 Bean,以实现灵活的配置和条件化加载。例如,可以根据特定的依赖是否存在来加载某些特定的配置或 Bean。

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

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

相关文章

以智慧监测模式守护燃气安全 ,汉威科技“传感芯”凸显智慧力

城市燃气工程作为城市基建的重要组成部分,与城市居民生活、工业生产紧密相关。提升城市燃气服务质量和安全水平,也一直是政府和民众关注的大事。然而,近年来居民住宅、餐饮等工商业场所燃气事故频发,时刻敲响的警钟也折射出我国在…

MySQL高级篇第4章(逻辑架构)

文章目录 1、逻辑架构剖析1.1 服务器处理客户端请求1.2 Connectors1.3 第一层:连接层1.4 第二层:服务层1.5 第三层:引擎层1.6 存储层1.7 小结 2、SQL执行流程2.1 MySQL 中的 SQL执行流程2.2 MySQL8中SQL执行原理2.3 MySQL5.7中SQL执行原理2.4…

9条建议告诉你如何正确处理PCB设计布线

一、关于PCB布线线宽 1、布线首先应满足工厂加工能力,首先向客户确认生产厂家,确认其生产能力,如图1所示。如客户无要求,线宽参考阻抗设计模板。 图1 PCB板厂线宽要求 2、阻抗模板,根据客户提供的板厚及层数要求&…

LeetCode208.Implement-Trie-Prefix-Tree<实现 Trie (前缀树)>

题目: 思路: tire树,学过,模板题。一种数据结构与算法的结合吧。 代码是: //codeclass Trie { private:bool isEnd;Trie* next[26]; public:Trie() {isEnd false;memset(next, 0, sizeof(next));}void insert(strin…

【环境配置】使用Docker搭建LAMP环境

这篇文章不是介绍DOCKER是什么,也不是阐述DOCKER的核心:镜像/容器和仓库之间的关系,它只是一篇让刚刚接触DOCKER的初学者,在没有完全了解DOCKER是什么之前,也能尽快的在Linux系统下面通过DOCKER来搭建一个LAMP环境,这是其一&#…

工作中遇到的关于配置问题

工作中遇到的问题 想记录一下 一个程序员小白每天遇到的问题 1.创建了一个Maven的web工程,但是启动一直是404,原服务器未能找到目标资源 解决办法: 选择deployment,点击加号选择war格式就OK啦 目录里面无法创建类&#xff0…

WPF实战学习笔记26-首页导航

修改UI&#xff0c;添加单击行为&#xff0c;并绑定导航命令 修改文件&#xff1a;Mytodo.Views.IndexView.xaml ,在导航梯形添加内容 <DataTemplate><BorderMargin"10"Background"{Binding Color}"CornerRadius"5"Opacity"0.9&…

Rust- 闭包

A closure in Rust is an anonymous function you can save in a variable or pass as an argument to another function. You can create the closure using a lightweight syntax and access variables from the scope in which it’s defined. Here’s an example of a clo…

深蓝学院C++基础与深度解析笔记 第13章 模板

1. 函数模板 ● 使用 template 关键字引入模板&#xff1a; template<typename T> //声明&#xff1a;T模板形参void fun(T); // T 函数形参template<typename T> //定义void fun(T) {...}– 函数模板不是函数 –…

什么是Java中的集成测试?

Java中的集成测试&#xff08;Integration Test&#xff09;是一种测试方法&#xff0c;用于测试多个模块或组件之间的交互和集成。在Java中&#xff0c;集成测试通常使用单元测试框架&#xff08;如JUnit&#xff09;编写和运行。 对于初学者来说&#xff0c;集成测试可能有些…

【C/C++】类之间的纵向关系——继承的概念

创作不易&#xff0c;本篇文章如果帮助到了你&#xff0c;还请点赞 关注支持一下♡>&#x16966;<)!! 主页专栏有更多知识&#xff0c;如有疑问欢迎大家指正讨论&#xff0c;共同进步&#xff01; &#x1f525;c系列专栏&#xff1a;C/C零基础到精通 &#x1f525; 给大…

六、初始化和清理(2)

本章概要 垃圾回收器 finalize() 的用途你必须实施清理终结条件垃圾回收器如何工作 垃圾回收器 程序员都了解初始化的重要性&#xff0c;但通常会忽略清理的重要性。毕竟&#xff0c;谁会去清理一个 int 呢&#xff1f;但是使用完一个对象就不管它并非总是安全的。Java 中有…

分享一篇详尽的关于如何在 JavaScript 中实现刷新令牌的指南

介绍 刷新令牌允许用户无需重新进行身份验证即可获取新的访问令牌&#xff0c;从而确保更加无缝的身份验证体验。这是通过使用长期刷新令牌来获取新的访问令牌来完成的&#xff0c;即使原始访问令牌已过期也是如此。 通常&#xff0c;当用户登录时&#xff0c;服务器会生成一对…

CentOS 8 上安装 Nginx

Nginx是一款高性能的开源Web服务器和反向代理服务器&#xff0c;以其轻量级和高效能而广受欢迎。在本教程中&#xff0c;我们将学习在 CentOS 8 操作系统上安装和配置 Nginx。 步骤 1&#xff1a;更新系统 在安装任何软件之前&#xff0c;让我们先更新系统的软件包列表和已安…

关于提示词 Prompt

Prompt原则 原则1 提供清晰明确的指示 注意在提示词中添加正确的分割符号 prompt """ 请给出下面文本的摘要&#xff1a; <你的文本> """可以指定输出格式&#xff0c;如&#xff1a;Json、HTML提示词中可以提供少量实例&#xff0c;…

大数据面试题:Kafka的单播和多播

面试题来源&#xff1a; 《大数据面试题 V4.0》 大数据面试题V3.0&#xff0c;523道题&#xff0c;679页&#xff0c;46w字 参考答案&#xff1a; 1、单播 一条消息只能被某一个消费者消费的模式称为单播。要实现消息单播&#xff0c;只要让这些消费者属于同一个消费者组即…

nosql之redis集群

文章目录 一.redis集群1.单节点redis服务器带来的问题2.集群redis3.集群的优势4.redis集群的实现方法5.redis群集的三种模式5.1 主从复制5.2 哨兵5.3 集群 二.Redis 主从复制1.主从复制概念2.主从复制的作用3.主从复制流程4.搭建Redis 主从复制4.1 安装 Redis4.2 修改 Redis 配…

【C++学习笔记】extern “c“以及如何查看符号表

如何查看符号表 要查看.a文件的内容&#xff0c;可以使用ar命令。下面是一些常见的用法&#xff1a; 列出.a文件中包含的所有文件&#xff1a; ar t <filename.a>提取.a文件中的单个文件&#xff1a; ar x <filename.a> <filename.o>将.a文件中的所有文件提…

【iToday】涵盖100+技术网站的一站式资讯平台 | 文末送书

里面包含了上百个IT网站&#xff0c;欢迎大家访问&#xff1a;http://itoday.top/#/ iToday&#xff0c;打开信息的新时代。作为一家创新的IT数字媒体平台&#xff0c;iToday致力于为用户提供最新、最全面的IT资讯和内容。里面包含了技术资讯、IT社区、面试求职、前沿科技等诸多…

Python实现GA遗传算法优化循环神经网络回归模型(LSTM回归算法)项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档视频讲解&#xff09;&#xff0c;如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 遗传算法&#xff08;Genetic Algorithm&#xff0c;GA&#xff09;最早是由美国的 John holland于20世…