当前位置: 首页 > news >正文

spring按条件注入@Condition及springboot对其的扩展

概述

springioc极大的方便了日常开发,但随着业务的迭代。配置的一些参数在某些情况下需要按条件注入。

比如原先定义的db公共模块下,相关的配置和工具类只是基于mysql的。但是后续有模块需要使用mongo/es等其他数据库,又想继续使用db公共模块下的一些类。

那么这时候就希望db公共模块下可以根据classpath下的相关驱动class是否存在来自动注入相关类。

@Condition注解就能解决这个问题。这个注解是spring
org.springframework.context.annotation.Conditional

springboot的核心是习惯优于配置,所有现成的实现了一堆@Conditionxxxx注解,比如
org.springframework.boot.autoconfigure.condition.ConditionalOnBean
org.springframework.boot.autoconfigure.condition.ConditionalOnClass

@Condition

进到这个注解的源码中一看,发现核心是org.springframework.context.annotation.Condition
接口,里面就一个matches方法,返回true/false.
意思也很简单,true就是符合条件会被spring加载到ioc容器中false则不会.

matches方法的入参org.springframework.context.annotation.ConditionContext中可以拿到很多有用的信息

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

springboot内置现成的Condition实现类封装的注解

在这里插入图片描述

  1. @ConditionalOnSingleCandidate 当给定类型的bean存在并且指定为Primary的给定类型存在时,返回true
  2. @ConditionalOnMissingBean 当给定的类型、类名、注解、昵称在beanFactory中不存在时返回true.各类型间是or的关系
  3. @ConditionalOnBean 与上面相反,要求bean存在
  4. @ConditionalOnMissingClass 当给定的类名在类路径上不存在时返回true,各类型间是and的关系
  5. @ConditionalOnClass 与上面相反,要求类存在
  6. @ConditionalOnCloudPlatform 当所配置的CloudPlatform为激活时返回true
  7. @ConditionalOnExpression spel表达式执行为true
  8. @ConditionalOnJava 运行时的java版本号是否包含给定的版本号.如果包含,返回匹配,否则,返回不匹配
  9. @ConditionalOnProperty 要求配置属性匹配条件
  10. @ConditionalOnJndi 给定的jndiLocation 必须存在一个.否则,返回不匹配
  11. @ConditionalOnNotWebApplication web环境不存在时
  12. @ConditionalOnWebApplication web环境存在时
  13. @ConditionalOnResource 要求制定的资源存在
http://www.lryc.cn/news/119864.html

相关文章:

  • MySQL多表连接查询3
  • 【从零开始学习JAVA | 第四十五篇】反射
  • 顺丰科技数据治理实践
  • Nginx+Tomcat负载均衡、动静分离实例详细部署
  • Java多线程(3)---锁策略、CAS和JUC
  • Linux:Shell编辑之文本处理器(awk)
  • 探索FSM (有限状态机)应用
  • 6.continue break
  • 如何在Linux中强制关闭卡住的PyCharm
  • c# Excel数据的导出与导入
  • Kotlin~Mediator中介者模式
  • 石子合并问题
  • 剑指Offer-搜索与回溯算法
  • 【云原生】Docker 详解(三):Docker 镜像管理基础
  • SD-MTSP:蜘蛛蜂优化算法SWO求解单仓库多旅行商问题MATLAB(可更改数据集,旅行商的数量和起点)
  • 【ARM 嵌入式 编译系列 3.1 -- GCC __attribute__((used)) 使用】
  • C++ ModBUS TCP客户端工具 qModMaster 介绍及使用
  • 笔记本电脑如何把sd卡数据恢复
  • 【2023 华数杯全国大学生数学建模竞赛】 B题 不透明制品最优配色方案设计 39页论文及python代码
  • Exams/ece241 2013 q4
  • Android OkHttp源码分析--分发器
  • 大数据面试题:说下Spark中的Transform和Action,为什么Spark要把操作分为Transform和Action?
  • 【图像去噪的扩散滤波】基于线性扩散滤波、边缘增强线性和非线性各向异性滤波的图像去噪研究(Matlab代码实现)
  • python函数、运算符等简单介绍2(无顺序)
  • k8s 自身原理 3
  • SpringBoot 3自带的 HTTP 客户端工具
  • Spring Boot多级缓存实现方案
  • 机器学习笔记:李宏毅chatgpt 大模型 大资料
  • 2023年中国智慧公安行业发展现况及发展趋势分析:数据化建设的覆盖范围不断扩大[图]
  • Apache Dubbo概述