【@Conditional】@Conditional注解使用方法

SpringBoot系列之@Conditional注解用法简介 SpringBoot系列之@Conditional注解用法简介 引用Spring官方文档的说法介绍一下@Conditional注解:Spring5.0.15版本@Conditional注解官方文档 @Conditional表示仅当所有指定条件都匹配时,组件才有资格注册 。 该@Conditional注释可以在以下任一方式使用: 作为任何@Bean方法的方法级注释 作为任何类的直接或间接注释的类... 阅读详情

举例

通过Condition可以自定义注入bean的条件,如:注入一个MyService的bean,前提条件是JdbcTemplate这个bean要注入成功,代码如下:

  1. 条件类
public class JdbcTemplateCondition implements Condition {
    @Override
    public boolean matches(ConditionContext contextm AnnotatedTypeMetadata metadata) {
        try {
            context.getClassLoader().loadClass("org.springframework.jdbc.core.JdbcTemplate");
            return true;
        } catch (Exception e) {
            return false;
        }
    }
}
  1. 准备注入MyService,加前提条件
@Conditional(JdbcTemplateCondition.class)
public MyService myService() {...}

以上代码的意思是只有当JdbcTemplateCondition类的条件成立时才会创建MyService这个bean。也就是说MyService bean创建的条件是Classpath里有JdbcTemplate,否则这个bean的声明就会被忽略。

补充

条件化注解配置生效条件
@ConditionalOnBean配置了某个指定的类
@ConditionalOnMissBean没有配置特定的类
@ConditionalOnClassClasspath里有指定的类
@ConditionalOnMissClassClasspath里缺少指定的类
@ConditionalOnExpression给定的Spring Expression Language(SpEl)表达式计算结果为true
@ConditionalOnJavaJava的版本匹配特定值或者一个范围值
@ConditionalOnJndi参数中给定的JNDI位置必须存在一个,如果没有给参数,则要有JDNI InitialContext
@ConditionalOnProperty指定的配置属性要有一个明确的值
@ConditionalOnResourceClasspath里有指定的资源
@ConditionalOnWebApplication这是一个web应用程序
@ConditionalOnNotWebApplication这不是一个web应用程序

springboot实例

@Configuration
@ConditionalOnClass({DataSource.class, EmbeddedDatabaseType.class})
@EnableConfigurationProperties(DataSourceProperties.class)
@Import({Register.class, DataSourcePoolMetadataProvidersConfiguration.class})
public class DataSourceAutoConfiguration {...}

DataSourceAutoConfiguration添加了@Configuration注解,它从其他配置类里导入了一些额外的配置,还自己定义了一些bean。最重要的是,DataSourceAutoConfiguration上添加了@ConditionalOnClass注解,要求Classpath里必须有DataSource和EmbeddedDatabaseType。如果它们不存在,条件就不成立,DataSourceAutoConfiguration提供的配置都会被忽略掉。

网络安全学习路线是怎样的? 为什么要学习安全? 近几年网络安全事件层出不穷,相信大家哪怕没遇到过,但也听过不少了吧。如服务器遭受入侵被黑,用户帐号被盗;被钓鱼、勒索病毒等,这些一旦发生,对企业而言都是不小的打击。因此,网络安全不容忽视,同时随着时代的不断发展,公司对于运维及网络工程师要求也越来越严格。未来越来越吃香的一定是技能方向广的复合型人才。网络安全可以说是一条非常好的发展道路。 今年两会期间,全国政协委员,360集团创始人、董事长周鸿祎提交了关于网络安全行业特殊人才的提案,为广大白帽子人员争取更好... 阅读详情

相关推荐

告别懵圈!用CANoe 5640手把手带你跑通SomeIP TC8测试(附脚本思路)

本文详细解析了基于CANoe 5640的SomeIP TC8测试全流程,从环境搭建到结果分析,特别针对车载以太网测试中的SomeIP协议测试难点提供实战指南。通过典型测试用例SOMEIP_TEST_61,手把手教你配置CANoe工程、编写CAPL脚本,并解决常见问题,助力开发者高效完成协议验证。

weixin_30791095的博客 360

@Conditional注解详解

@Conditional来源于spring-context包下的一个注解。Conditional中文是条件的意思,@Conditional注解它的作用是按照一定的条件进行判断,满足条件给容器注册bean。@Conditional下还有很多扩展注解,例如@ConditionalOnClass、@ConditionalOnBean等等

怪咖@的博客 2万+

STM32实战:用定时器触发ADC+DMA双缓冲实现电机电流采样(附避坑指南)

本文详细介绍了如何利用STM32的定时器触发ADC注入组采样,结合DMA双缓冲机制实现电机电流的高效采样。通过PWM触发和双缓冲架构,解决了开关噪声干扰、实时性要求和数据一致性等核心挑战,显著降低CPU负载并提升采样精度。附有完整的代码示例和避坑指南,适用于无人机电调、工业伺服驱动器等高精度电机控制场景。

weixin_33737134的博客 518

Spring Boot 条件注解@Conditional介绍

一、概述 Spring Boot 是自以为是的,当 Spring Boot 在classpath中找到相关依赖项时,它会为模块提供默认(自动)配置。 举例,Spring Boot 提供了: 如 classpath 中未提供服务器组件依赖,则默认启用内嵌Tomcat作为服务端依赖。你也可以把它改成 Jetty 或 Undertow,仅需要添加相应的依赖到 classpath 中(译者注:常见的方式就是添加Maven或Gradle依赖) 当它在classpath找到 spring-cloud-start

weixin_68320784的博客 3049

从SolidWorks到Simscape:URDF导出模型错位的5个常见原因及修复方法

本文深入分析了从SolidWorks导出URDF模型到Simscape时出现模型错位的5个常见原因,包括坐标系定义、RPY角陷阱、轴方向统一、质量属性导出和层次结构错乱,并提供了详细的修复方法和实战技巧,帮助工程师高效解决模型错位问题。

weixin_30664051的博客 440

数字通信:信源编码、信道编码、调制、物理信道、解调、信道解码、信源解码

在通信系统中,信息的传输通常需要经过一系列的处理步骤,确保数据可以在信道中高效且可靠地传输。以下是信源编码、信道编码、调制、物理信道、解调、信道解码、信源解码的具体含义及其常见技术的解释。

weixin_44012667的博客 4804

@ConditionalOnBean注解失效

查找不到组件user01。 错误原因:mycat的创建顺序应该在user01之前. 问题解决

weixin_53843081的博客 772

《QT+PCL》点云的点选与框选

【代码】《QT+PCL》点云的点选与框选。

阁楼 3600

使用了 @ConditionalOnClass 却仍然报找不到类的错

文章目录前言我的错误经历分析总结经验 前言 @ConditionalOnClass的作用是当有该类时,才符合条件,继续执行其他逻辑。 @ConditionalOnClass包含两个属性:value和name value是class数组,name是string数组。当一个类不确定是否在classpath当中时,建议使用name属性,就算找不到该类时,也不会报错。 我的错误经历 概况就是,我使用了...

weixin_42260270的博客 7181

130、NPU的仿真测试:使用Gem5进行全系统仿真

这篇文章摘要(149字): 本文分享了使用Gem5全系统仿真器验证NPU设计的实践经验。作者通过搭建自定义NPU模型并集成到Gem5系统中,实现了CPU-NPU-内存协同仿真。关键点包括:1) 使用SimObject机制构建可配置的NPU模型;2) 合理配置IO和内存总线避免访问冲突;3) 开发Linux驱动实现CPU与NPU通信;4) 利用Gem5调试功能监控内部状态。相比RTL仿真和FPGA验证,该方法能快速验证微架构设计并定位系统级问题,有效减少了流片风险。文章特别强调了时钟域配置、总线仲裁、对齐访问

m0_50546716的博客 121

YOLOv11改进前必看 - YAML模型配置文件详细解读(再也不用担心通道数不匹配) 附网络结构图

YOLOv11的模型配置文件在中,里面包含以及,本文以目标检测模型文件为例(其他文件完全一致),详细介绍一下YOLOv11模型文件中各参数的含义。

Limiiiing的博客 5308

SpringBoot自定义自动装配与Conditional失效问题

文章目录前言自动装配规则类命名规则package命名规则jar包构建规则jar包结构jar包取名构建自定义的自动装配@ConditionOnBean失效问题为何非自动装配的配置会失效?为何自动装配的配置就有效? 前言 参考书籍《SpringBoot编程思想》— 小马哥mercyblitz 此书是难得的讲述SpringBoot的一本好书,由Spring的注解发展史介绍到Spring的注解驱动,以一...

|-| [- |_ |_ () 2202

特征拼接(Feature Concatenation)技术全景解析

特征拼接是深度学习中的核心特征融合技术,通过在指定维度连接不同来源的特征张量,创造性地解决了多源、多尺度特征融合的关键挑战。这种简单却强大的操作已成为现代神经网络架构设计的基石。

浩瀚之水的专栏 1639

@Conditional注解常规使用方法

@Conditional注解常规使用方法 @Conditional 翻译过来就是:条件装配 就是指满足指定的条件,则进行组件注入,如果不满足,则不注入。 想要了解@Conditional注解首先要知道应该怎么使用它,就像厨房做菜一样,需要准备好材料。这里需要三个文件: 1.主程序类 2.实体类 3.测试配置类 1.主程序类:MainApplication @SpringBootApplication public class MainApplication { public static void

qq_45383769的博客 6119

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

cmd没有过滤java注释内容,深入浅出@Conditional注解使用方法

写作目的了解spring 中ConditionXXX相关注解的使用方法.​ 目录大纲:(1)例子说明(2)编码思路(3)编写条件类WindowCondition和LinuxCondition(4)编写接口CmdService以及两个实现类(5)编写配置类,根据条件进行注入不同的类(6)编写测试代码(7)Spring提供的Condition(8)题外话:怎么在Condition中获取appli...

weixin_36308751的博客 225

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

@Transactional +自定义注解不生效_研磨Spring条件注入基于@Conditional注解

在Spring项目中,我们希望bean的注入不是必须的,而是依赖条件的。只有当项目中引入特定依赖库、或者只有当某个bean被创建、或者设置了某个环境变量时,才会创建这个bean。在Spring4之前,这种条件注入的方式还不支持,在Spring4之后引入了一个新的注解@Conditional,这个注解作用在@Bean注解修饰的方式上。它能够通过判断指定条件是否满足来决定是否创建这样的B...

weixin_39810856的博客 449

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

SpringBean注册之@Conditional注解解析

前言 @Conditional是Spring4新提供的注解,它的作用是按照一定的条件进行判断,满足条件给容器注册bean。 @Conditional的定义: //此注解可以标注在类和方法上 @Target({ElementType.TYPE, ElementType.METHOD}) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface Conditional { Class<? extends Condition

clyu的博客 441

Spring 中 @Conditional注解

@Conditional 是 Spring4 新提供的注解,它的作用是按照给定条件判断是否注册bean。 @Conditional的定义: @Target({ElementType.TYPE, ElementType.METHOD}) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface Conditional { Class<? extends Condition>[] value(); } 由定义可以得出:

雨后是冰雹 277

spring原理之@Conditional与@Configuration

spring的心得体会

huanleshidai的博客 545

spring注解之@Conditional注解

1,@Conditional注解是什么 @Conditional注解是可以根据一些自定义的条件动态的选择是否加载该bean到springIOC容器中去,如果看过springBoot源码的同学会发现,springBoot中大量使用了该注解 2,@Conditional注解怎么使用 查看@Conditional源码你会发现它既可以作用在方法上,同时也可以作用在类上,源码如下: @Target...

呼吸的小鱼博客 557

Spring @Conditional注解 详细讲解及示例

https://blog.youkuaiyun.com/xcy1193068639/article/details/81589489 前言: @Conditional是Spring4新提供的注解,它的作用是按照一定的条件进行判断,满足条件给容器注册bean。 @Conditional的定义: //此注解可以标注在类和方法上 @Target({ElementType.TYPE, ElementType....

z69183787的专栏 835

Spring @Conditional 注解的使用和原理

在单纯的 Spring 项目中,我们是否也可以使用 @Conditional 来实现一些自动化配置的特性呢?应该怎么样去使用 @Conditional?它又是如何生效的?

Anon 1073

@Conditional注解---spring

@Configuration @Import(MyImportSelector.class) public class ApplicationConfig { @Conditional(TestCondition.class) @Bean public MyBeanFactory myBeanFactory(){ return new MyBeanFac...

坚持住啊 171

Spring注解之@Conditional

@Conditional Spring 提供了profile进行一个动态配置选择,同时更加细力度的,我们可以使用@Conditional来实现。可以说profile能够实现的,@Conditional都能够实现。 @Configuration @Conditional({Main.MyCondition.class}) @Main.MyAnnotation({"123", "456...

丶洗牙刷脸 373

@Conditional注解有什么用?

注解位于Class

smart_an的专栏 1095

转:spring的注解@Conditional

前言: 本文是为了方便阅读,从其他作者转载过来,原作者地址https://blog.youkuaiyun.com/xcy1193068639/article/details/81491071 @Conditional是Spring4新提供的注解,它的作用是按照一定的条件进行判断,满足条件给容器注册bean。 @Conditional的定义: //此注解可以标注在类和方法上 @Target({ElementTy...

大数据颜值担当 210
上一篇: 【Mycat】MySQL读写分离
下一篇: 【exception】Caused by org.hibernate.hql.internal.ast.QuerySyntaxException t_use
ColdFireMan
博客等级 码龄10年 27粉丝 112原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值