SpringBoot @Conditional
@Conditional 是条件装配注解,它的作用是当装配bean时,首先要按照一定条件去判断,只有满足条件才会将bean注册到容器。
@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Conditional {Class<? extends Condition>[] value();
}
注解中只有一个class类型的属性,这个 class 便是需要实现条件判断的类,这个类必须实现 Condition 接口的 matches 方法,该方法会返回一个boolean类型值,通过这个值来判断条件是否成立。
Condition 接口:
@FunctionalInterface
public interface Condition {/*** Determine if the condition matches.* @param context the condition context* @param metadata metadata of the {@link org.springframework.core.type.AnnotationMetadata class}* or {@link org.springframework.core.type.MethodMetadata method} being checked* @return {@code true} if the condition matches and the component can be registered,* or {@code false} to veto the annotated component's registration*/boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata);}
Conditional相关的其它注解:
注解名称 | 描述 |
@ConditionalOnBean | 在某个 bean 存在的时候 |
@ConditionalOnMissingBean | 在某个 bean 不存在的时候 |
@ConditionalOnClass | 当前 classPath 下可以找到某个 class 的时候 |
@ConditionalOnMissingClass | 当前 classPath 下无法找到某个 class 的时候 |
@ConditionalOnResource | 当前 classPath 下是否存在某个资源文件 |
@ConditionalOnProperty | 当前 JVM 是否包含某个属性值 |
@ConditionalOnWebApplication | 当前 Spring context 是否是 web 应用程序 |
SPI
条件装配除了通过@Conditional 相关注解声明,还可以使用 SPI 的方式声明。
在 META-INF/spring-autoconfigure-metadata.properties 配置以下内容:
com.test.TestConfig.ConditionalOnClass=com.test.TestClass
这样一来,只有 com.test.TestClass 类存在的情况,才会加载 com.test.TestConfig 配置类。
Spring 在通过 AutoConfigurationImportSelector 加载 spring.factories 配置之前,会先扫描 spring-autoconfigure-metadata.properties 文件,从而过滤掉不满足条件的配置类。
SpringBoot @Conditional相关推荐
- SpringBoot conditional注解和自定义conditional注解使用
conditional注解是Springboot starter的基石,自动装配的时候会根据条件确定是否需要注入这个类. 含义:基于条件的注解. 作用:根据是否满足某个特定条件来决定是否创建某个特定的 ...
- SpringBoot @Conditional系列注解
目录 @ConditionalOnClass.@ConditionalOnMissingClass @ConditionalOnBean.@ConditionalOnMissingBean @Cond ...
- SpringBoot @Conditional的使用
结构说明 hello-spring-boot-starter: 没什么用,引用了autoconfigure模块 hello-spring-boot-starter-autoconfigure: 主要的 ...
- SpringBoot - @Conditional
@Conditional @Conditional注解可以参考Spring学习中的@Conditional,参考地址:https://blog.csdn.net/qq_27062249/article ...
- SpringBoot 自动配置
Springboot 自动配置 关注 "弋凡"(YiFan)微信公众号吧 记录简单笔记 做你的最爱 Springboot 是什么呐? 我管她是什么,好用就行了啊!!! spring ...
- java.lang.ClassNotFoundException:org.springframework.transaction.TransactionException
使用Spring 3开发Quartz,并遇到以下错误消息. Caused by: java.lang.NoClassDefFoundError: org/springframework/transac ...
- 3springboot:springboot配置文件(外部配置加载顺序、自动配置原理,@Conditional)
1.外部配置加载顺序 SpringBoot也可以从以下位置加载配置: 优先级从高到低 高优先级的配置覆盖低优先级的配置,所有的配置会形成互补配置 1.命令行参数 所有的配置都可以在命令行上进行指定 ...
- SpringBoot @Configuration •@Import •@Conditional•@ImportResoure基本使用
一.@Configuration 基本使用 Full模式与Lite模式 • 示例 • 最佳实战 • 配置 类组件之间无依赖关系用Lite模式加速容器启动过程,减少判断 • 配置 类组件之间有依赖关系, ...
- SpringBoot的@Conditional和自动配置类生效
@Conditional原理 在之前的博客中提到了关于自动配置的原理,但是在自动配置的时候有很多的判断,只有当这些判断都成功之后在自动配置的时候才会成功.但是我们会发现一个问题,当我们使用@Be ...
最新文章
- devkit_如何使用NodeMCU Devkit和Firebase数据库开始物联网
- linux硬盘目录下,Linux 新添加的硬盘格式化并挂载到目录下
- 【JSP EL表达式】动态表达式/表达式拼接
- SAP Spartacus B2B Org Unit树状结构的加载机制
- Kestrel的ListenAnyIP和ListenLocalhost的区别
- Elasticsearch使用REST API实现全文检索
- 更改文件和目录(及子目录)的拥有者
- 网页统计所用到的名词解析
- 什么是客户旅程_为什么记录您的旅程将导致开发人员成功
- 分析sql字段_全面解析一条SQL语句执行得很慢的原因有哪些
- 黑苹果Mojave下驱动高通模块Atheros DHXA-195(AR9285无线网卡和AR3011 蓝牙3.0)
- 浅谈ACL在校园网中的应用
- [Java]一个WiFi管理器(获取WiFi连接的网关的ip和信息)和热点管理器(获取连接本机的热点的设备的ip、MAC和信息)
- 2022年京东618活动规则:618满减规则为299减50
- AutoJs学习-2048全自动
- 洛谷P5594-【XR-4】模拟赛(模拟)
- java企业排班系统企业考勤人脸识别考勤系统源码企业批量排班网站
- XML - XML学习/XML文件解析器(C++)实现
- 丢掉迅雷,1M的下载神器让你下载飞起来,NDM/XDM分享
- [转帖]计较,是贫穷的开始 鸡汤...
热门文章
- 问题记录——the specified group[${xxx}] contains illegal characters, allowing only ^[%|a-zA-Z0-9_-]+$
- 中国汽车品牌口碑榜之:--2013年第3季度福州商用车综合口碑排名
- 机器学习笔试面试题——day3
- 东莞有哪些点餐系统服务商?东莞点菜软件哪家好?
- 湖南省经济贸易学校计算机,湖南省经济贸易职业中专学校2021年招生简介
- 某宝x-sign签名分析-商品详情接口
- C++ Primer中文版(第5版)
- 2021年清华大学MEM考研复试真题分享
- 欢迎加入QQandroid群,群号【60591330】
- LeetCode——209.长度最小的子数组