Spring注解解析:条件注解@Condition注解和@ConditonOnXXX注解

news2025/1/20 5:08:58

文章目录

  • 一、条件注解
  • 二、@Conditional
    • 1、使用方法
    • 2、示例

一、条件注解

条件注解的作用是给需要装载的Bean增加一个条件判断。只有满足条件才会装在到IoC容器中。而这个条件可以由自己去完成的,可以通过重写Condition接口重写matches()方法去实现自定义的逻辑。所以说这个注解增加了对Bean装载的灵活性。
在这里插入图片描述

  • @Conditonal:是一个元注解(meta-annotation),用于定义条件化的bean创建
  • @ConditionalOnBean:当指定的bean存在时,才会注册当前bean。
  • @ConditionalOnMissingBean:当指定的bean不存在时,才会注册当前bean。
  • @ConditionalOnClass:当指定的类在类路径上可用时,才会注册当前bean。
  • @ConditionalOnMissingClass:当指定的类在类路径上不可用时,才会注册当前bean。
  • @ConditionalOnProperty:当指定的属性具有指定的值时,才会注册当前bean。

二、@Conditional

1、使用方法

  • 自定义条件类
    需要实现org.springframework.context.annotation.Condition接口或继承org.springframework.context.annotation.Condition的某个实现类(如OnPropertyCondition、OnBeanCondition等)。 实现Condition接口需要覆盖matches(ConditionContext, AnnotatedTypeMetadata)方法,这个方法会返回一个布尔值,表示是否满足条件。
  • 在@Bean方法或@Configuration类上使用@Conditional
    可以将自定义的条件类作为@Conditional的值,或者直接使用Spring提供的条件注解(如@ConditionalOnProperty、@ConditionalOnBean等)。

2、示例

  • 自定义条件类
public class MyCustomCondition implements Condition {  
    @Override  
    public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {  
        // 这里可以根据需要编写条件判断逻辑  
        // 例如,检查某个配置属性是否存在或某个bean是否已经定义  
        // ...  
        return true; // 假设这里总是满足条件  
    }  
}
  • 在@Bean方法上使用@Conditional
@Configuration  
public class MyConfig {  
  
    @Bean  
    @Conditional(MyCustomCondition.class)  
    public MyBean myBean() {  
        return new MyBean();  
    }  
}

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

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

相关文章

.NET 分享一款Web打包和解压缩工具

01本文概要 在.NET部署环境中,利用IIS中间件开启对ASP的支持,可以实现许多强大的文件操作功能。特别是在一些需要进行预编译的情况下,通过上传ASP脚本,可以获得WebShell,从而方便地进行各种操作。本文将介绍一个名为S…

运动耳机怎么选?五款新手必买的运动耳机盘点

运动耳机是专为运动爱好者设计的耳机,轻巧便携,佩戴稳固。无论你在跑步、健身还是骑行,它都能为你带来优质的音乐体验。那如何选择一款合适的运动耳机呢?这里,我结合自己和身边朋友平时选购经验,整理了一些…

sklearn机器学习编程练习大全(二)

sklearn机器学习编程练习大全(二) 第11题 从字符串提取标签第12题 IRIS数据集探索第13题 构建模型,计算准确率第14题 预估目标列编码第15题 one-hot编码 第11题 从字符串提取标签 DataFrame如下: 如何将以上的DataFrame变成如下的…

python批量生成25位数字字母混合序列号(SN码)

欢迎关注我👆,收藏下次不迷路┗|`O′|┛ 嗷~~ 目录 一.前言 二.代码 三.使用 四.分析 一.前言 SN码,即Serial Number的缩写,有时也被称为Serial No,是产品序列号的意思。它是一个独特的标识符,用于区分同一种类

第二证券资讯|昨夜,黄金大涨、美股创新高!人民币狂拉

受降息预期影响,美股三大指数团体创新高,黄金期现价格亦大幅走高。 当地时间5月15日星期三,美股三大股指全线收涨。道指涨0.88%,纳指涨1.40%,标普500指数涨1.17%。 经济数据方面。美国4月CPI同比上涨3.4%&#xff0c…

每日一练 2025.5.16

题目; 给定一个非负整数,你至多可以交换一次数字中的任意两位。返回你能得到的最大值。 示例 1 : 输入: 2736 输出: 7236 解释: 交换数字2和数字7。示例 2 : 输入: 9973 输出: 9973 解释: 不需要交换。注意: 给定数字的范围是 [0, 108] 解题&#…

首战告捷!KCM Trade漂移队出征2024日本漂移锦标赛(FDJ2)

卓越之姿,非凡之势!KCM Trade漂移队以实力点燃激情 当激情与速度交织,当硝烟四起的战场转移到赛车领域,我们见证了一场精彩绝伦、实力与策略并存的较量——KCM Trade漂移队在2024日本漂移锦标赛(FDJ2)上展现…

AIGC文生视频:Sora模型报告总结

作为世界模拟器的视频生成模型 我们探索视频数据生成模型的大规模训练。具体来说,我们在可变持续时间、分辨率和宽高比的视频和图像上联合训练文本条件扩散模型。我们利用对视频和图像潜在代码的时空补丁进行操作的变压器架构。我们最大的模型 Sora 能够生成一分钟…

惠海 H4112 同步整流30V降压芯片IC 24V转12V5V3.3V3.5A方案EN使能控制

惠海H4112同步整流30V降压芯片IC是一款DCDC电源管理芯片,它具备精确恒压和恒流的同步降压能力,适用于多种应用场景,如汽车充电器、照明灯、便携式设备供电电源和电池充电器等。 输出电压与电流调整: H4112支持输出电压在2.5V到2…

大模型时代,交换机技术演变、性能分析、衡量指标

OSI协议及在高性能计算中向RDMA的过渡 协议是为计算机网络内的数据交换而建立的一组规则、标准或协议。在法律层面,OSI七层协议被视为国际标准。该协议于20世纪80年代引入,旨在通过其七层网络模型标准化计算机间通信,以满足开放网络的要求。…

wamp 安装 PHP8

最近的项目需求,需要将PHP 升级8使用,一直都是用wamp ,所以需要在wamp集成PHP8 1、首先下载 php8 的包。地址: PHP: Downloadshttps://www.php.net/downloads.php 下载版本是目前最新的 PHP8.3.7,不要下载nts 版本&a…

【MySQL精通之路】MySQL8.0官方文档-数据字典

目录 16.1 数据字典架构 如何升级数据字典 使用MySQL的调试版本查看数据字典表 16.2 删除基于文件的元数据存储 .frm文件 .par文件 .TRN文件 .TRG文件 .isl文件 db.opt文件 ddl_log.log文件 16.3 字典数据的事务存储 16.4 字典对象缓存 表空间定义缓存分区&#…

HTML(3)——常用标签3

引用标签 1.<blockquote>和<q> 两者都是对文本的解释引用&#xff0c;<blockquote>是用较大的段落进行解释&#xff0c;<q>是对较小的段落进行解释。 <!DOCTYPE html> <html lang"en"> <head><meta charset"UT…

人工智能(一)架构

一、引言 人工智能这个词不是很新鲜&#xff0c;早就有开始研究的&#xff0c;各种推荐系统、智能客服都是有一定的智能服务的&#xff0c;但是一直都没有体现出多高的智能性&#xff0c;很多时候更像是‘人工智障’。 但是自从chatGpt3被大范围的营销和使用之后&#xff0c;人…

提升工作效率,畅享Microsoft Office 2016 for Mac/win软件

Microsoft Office 2016 for Mac/win是一款功能强大的办公软件套件&#xff0c;为用户提供了一系列高效、易用的工具&#xff0c;帮助您在工作和学习中更加高效地处理各种任务。无论您是学生、职场人士还是企业管理者&#xff0c;这款软件都能满足您的各种需求。 首先&#xff…

霍庭格TruPlasma MF 7100 7050电源现货50KW

霍庭格TruPlasma MF 7100 7050电源现货50KW

MPLS小实验

实验图&#xff1a; 实验要求&#xff1a; 要求使用MPLS技术&#xff0c;将实验通&#xff0c;并在实验结束后使用命令&#xff1a;tracert -v -a 看是否基于标签进行转发。 如上&#xff1a;在每台路由器上都有两个环回&#xff0c;一个用于模拟用户网段&#xff0c;一个用于M…

计算机毕业设计 | vue+springboot电影票售卖 影院售票商城 电影管理系统(附源码+论文)

1&#xff0c;项目背景 目的&#xff1a;本课题主要目标是设计并能够实现一个基于web网页的电影院购票选座系统&#xff0c;整个网站项目使用了B/S架构&#xff0c;基于vue和SpringBoot框架下开发&#xff1b;管理员通过后台管理系统实现管理影院信息&#xff0c;电影信息&…

双向链表结构

1.双向链表定义 双向链表也叫双链表&#xff0c;是链表的一种&#xff0c;它的每个数据节点中都有两个指针&#xff0c;分别指向直接前驱和直接后继。 2.实现双向链表 2.1创建双向链表类 /*** 基于双向链表实现元素存取的容器* param <E>*/ public class MyDoubleLinked…

智慧车间MES系统源码,采用java+springboot+vue.js+uniapp技术开发

智慧车间MES系统源码&#xff0c;采用javaspringbootvue.jsuniapp开发 MES系统&#xff08;Manufacturing Execution System&#xff09;是一种面向制造企业车间执行层的生产信息化管理系统&#xff0c;它是企业信息化系统的重要组成部分&#xff0c;是ERP&#xff08;Enterpri…