Spring - @Conditional全解
文章目录
- 作用
- 扩展注解
- Code
- Bean1 Bean2
- 自定义比较规则
- 配置类
- 测试类
- 如何校验自动配置类是否生效
作用
必须是@Conditional指定的条件成立,才给容器中添加组件,配置配里面的所有内容才生效
扩展注解
@Conditional扩展注解 | 作用(判断是否满足当前指定条件) |
---|---|
@ConditionalOnJava | 系统的java版本是否符合要求 |
@ConditionalOnBean | 容器中存在指定Bean; |
@ConditionalOnMissingBean | 容器中不存在指定Bean; |
@ConditionalOnExpression | 满足SpEL表达式指定 |
@ConditionalOnClass | 系统中有指定的类 |
@ConditionalOnMissingClass | 系统中没有指定的类 |
@ConditionalOnSingleCandidate | 容器中只有一个指定的Bean,或者这个Bean是首选Bean |
@ConditionalOnProperty | 系统中指定的属性是否有指定的值 |
@ConditionalOnResource | 类路径下是否存在指定资源文件 |
@ConditionalOnWebApplication | 当前是web环境 |
@ConditionalOnNotWebApplication | 当前不是web环境 |
@ConditionalOnJndi | JNDI存在指定项 |
Code
Bean1 Bean2
public class Bean1 {public Bean1() {System.out.println("我是Bean1的构造方法");}
}
public class Bean2 {public Bean2() {System.out.println("我是Bean2的构造方法");}
}
自定义比较规则
import org.springframework.context.annotation.Condition;
import org.springframework.context.annotation.ConditionContext;
import org.springframework.core.type.AnnotatedTypeMetadata;public class ArtisanCondition implements Condition {@Overridepublic boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {//判断容器中是否有bean1的组件if(context.getBeanFactory().containsBean("bean1")) {return true;}return false;}
}
配置类
import com.tuling.testconditional.compent.Bean1;
import com.tuling.testconditional.compent.Bean2;
import com.tuling.testconditional.condition.ArtisanCondition;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Conditional;public class MainConfig {@Beanpublic Bean1 bean1() {return new Bean1();}// 如果满足ArtisanCondition中定义的规则,就实例化Bean2 @Bean@Conditional(value = ArtisanCondition.class) public Bean2 bean2() {return new Bean2();}
}
测试类
import com.tuling.testconditional.config.MainConfig;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;public class MainClass {public static void main(String[] args) {AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(MainConfig.class);for(String beanName:ctx.getBeanDefinitionNames()) {System.out.println("beanName:"+beanName);}}
}
为了测试效果
重新测试
如何校验自动配置类是否生效
配置文件中增加
启用 debug=true属性;来让控制台打印自动配置报告
Spring - @Conditional全解相关推荐
- Spring - @CompentScan全解
文章目录 基本使用 excludeFilters includeFilters @ComponentScan.Filter 4种类型 自定义FilterType 基本使用 在配置类上写@Compent ...
- Mybatis系列全解(六):Mybatis最硬核的API你知道几个?
2020 年的大疫情,把世界撕成几片. 时至今日,依旧人心惶惶. 很庆幸,身处这安稳国, 兼得一份安稳工. · 东家常讲的一个词:深秋心态 . 大势时,不跟风.起哄, 萧条时,不放弃播种和耕耘的信心, ...
- Spring MVC学习(8)—HandlerInterceptor处理器拦截器机制全解
基于最新Spring 5.x,详细介绍了Spring MVC的HandlerInterceptor处理器拦截器机制,以及它的一系列拦截方法. 本次我们来学习Sring MVC的HandlerInter ...
- Spring AOP详解(转载)所需要的包
上一篇文章中,<Spring Aop详解(转载)>里的代码都可以运行,只是包比较多,中间缺少了几个相应的包,根据报错,几经百度搜索,终于补全了所有包. 截图如下: 在主测试类里面,有人怀疑 ...
- 语义分割中的深度学习方法全解:从FCN、SegNet到各版本DeepLab
语义分割中的深度学习方法全解:从FCN.SegNet到各版本DeepLab 原文:https://www.sohu.com/a/155907339_610300 图像语义分割就是机器自动从图像中分割出 ...
- quartz mysql索引_分布式系统中的定时任务全解(二)
在实际项目中,通常需要用到定时任务(定时作业),spring框架提供了很好的实现. 1. 下载spring-quartz插件包 这里默认当前系统中是集成了spring框架的基本功能的.去网上下载sp ...
- Mybatis系列全解(八):Mybatis的9大动态SQL标签你知道几个?提前致女神!
封面:洛小汐 作者:潘潘 2021年,仰望天空,脚踏实地. 这算是春节后首篇 Mybatis 文了~ 跨了个年感觉写了有半个世纪 - 借着女神节 ヾ(◍°∇°◍)ノ゙ 提前祝男神女神们越靓越富越嗨森! ...
- PowerMockerJacoco单元测试全解
PowerMocker&Jacoco单元测试全解 第一章 pom文件的引入与各种坑 1. pom文件 <!-- 测试包 --> <dependency><grou ...
- Mybatis系列全解(五):全网最全!详解Mybatis的Mapper映射文件
封面:洛小汐 作者:潘潘 若不是生活所迫,谁愿意背负一身才华. 前言 上节我们介绍了 < Mybatis系列全解(四):全网最全!Mybatis配置文件 XML 全貌详解 >,内容很详细( ...
最新文章
- 如何检查密钥库文件中的证书名称和别名?
- adb shell input text 完美支持中文输入
- android10热点验证身份,在 Android 上使用 Microsoft 进行身份验证
- mui 时间样式错乱_微信公众号素材样式中心在哪?公众号动态分割线怎么添加?...
- excel插入行 uipath_Uipath中excel的activities用法介绍
- Spring全家桶,永远滴神!
- windows oracle 宕机,windows上的oracle一次宕机恢复
- 计算机组成安徽大学,2安徽大学《计算机组成与结构》B卷及答案.pdf
- 剑指offer(28)—数组中出现次数超过一半的数字
- 秋招面经(Java开发)
- 《Attention-based LSTM for Aspect-level Sentiment Classification》阅读笔记
- Unity 发布hololens注意事项
- 裴礼文数学分析中的典型问题与方法第5章级数练习
- fileupload控件的属性_FileUpload控件的配置 .
- 外星人aw768键盘设置快捷键
- hcia华为认证学习
- 打开Excel新窗口的方法
- cartographer自动更新地图,2条路径数据合并为1条数据
- 让运行ubuntu20.04的笔记本电脑实现关闭盖子自动休眠
- 使用Perl编写协议分析脚本 z
热门文章
- 树状图栏目切换_AAAI 2020 | 中山大学HCP实验室:基于树状结构策略的渐进强化学习,代码已开源...
- python交互式程序设计导论第二周_沧州学堂云Python 交互式程序设计导论搜题公众号...
- AttributeError: module ‘grpc.experimental.aio‘ has no attribute ‘StreamUnaryCall‘
- spark 提交任务到集群
- Python center 用法
- python怎么新建工程_pycharm新建一个python工程步骤
- 数据中台实战(一):以B2B电商亿订为例谈数据埋点(产品经理视角)
- Flink从入门到精通100篇(四)-基于 Flink 和 Drools 的实时日志处理
- WordCount运行详解
- MATLAB基本操作(六):矩阵操作的相关函数