文章目录

  • 作用
  • 扩展注解
  • 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全解相关推荐

  1. Spring - @CompentScan全解

    文章目录 基本使用 excludeFilters includeFilters @ComponentScan.Filter 4种类型 自定义FilterType 基本使用 在配置类上写@Compent ...

  2. Mybatis系列全解(六):Mybatis最硬核的API你知道几个?

    2020 年的大疫情,把世界撕成几片. 时至今日,依旧人心惶惶. 很庆幸,身处这安稳国, 兼得一份安稳工. · 东家常讲的一个词:深秋心态 . 大势时,不跟风.起哄, 萧条时,不放弃播种和耕耘的信心, ...

  3. Spring MVC学习(8)—HandlerInterceptor处理器拦截器机制全解

    基于最新Spring 5.x,详细介绍了Spring MVC的HandlerInterceptor处理器拦截器机制,以及它的一系列拦截方法. 本次我们来学习Sring MVC的HandlerInter ...

  4. Spring AOP详解(转载)所需要的包

    上一篇文章中,<Spring Aop详解(转载)>里的代码都可以运行,只是包比较多,中间缺少了几个相应的包,根据报错,几经百度搜索,终于补全了所有包. 截图如下: 在主测试类里面,有人怀疑 ...

  5. 语义分割中的深度学习方法全解:从FCN、SegNet到各版本DeepLab

    语义分割中的深度学习方法全解:从FCN.SegNet到各版本DeepLab 原文:https://www.sohu.com/a/155907339_610300 图像语义分割就是机器自动从图像中分割出 ...

  6. quartz mysql索引_分布式系统中的定时任务全解(二)

    在实际项目中,通常需要用到定时任务(定时作业),spring框架提供了很好的实现. 1.  下载spring-quartz插件包 这里默认当前系统中是集成了spring框架的基本功能的.去网上下载sp ...

  7. Mybatis系列全解(八):Mybatis的9大动态SQL标签你知道几个?提前致女神!

    封面:洛小汐 作者:潘潘 2021年,仰望天空,脚踏实地. 这算是春节后首篇 Mybatis 文了~ 跨了个年感觉写了有半个世纪 - 借着女神节 ヾ(◍°∇°◍)ノ゙ 提前祝男神女神们越靓越富越嗨森! ...

  8. PowerMockerJacoco单元测试全解

    PowerMocker&Jacoco单元测试全解 第一章 pom文件的引入与各种坑 1. pom文件 <!-- 测试包 --> <dependency><grou ...

  9. Mybatis系列全解(五):全网最全!详解Mybatis的Mapper映射文件

    封面:洛小汐 作者:潘潘 若不是生活所迫,谁愿意背负一身才华. 前言 上节我们介绍了 < Mybatis系列全解(四):全网最全!Mybatis配置文件 XML 全貌详解 >,内容很详细( ...

最新文章

  1. 如何检查密钥库文件中的证书名称和别名?
  2. adb shell input text 完美支持中文输入
  3. android10热点验证身份,在 Android 上使用 Microsoft 进行身份验证
  4. mui 时间样式错乱_微信公众号素材样式中心在哪?公众号动态分割线怎么添加?...
  5. excel插入行 uipath_Uipath中excel的activities用法介绍
  6. Spring全家桶,永远滴神!
  7. windows oracle 宕机,windows上的oracle一次宕机恢复
  8. 计算机组成安徽大学,2安徽大学《计算机组成与结构》B卷及答案.pdf
  9. 剑指offer(28)—数组中出现次数超过一半的数字
  10. 秋招面经(Java开发)
  11. 《Attention-based LSTM for Aspect-level Sentiment Classification》阅读笔记
  12. Unity 发布hololens注意事项
  13. 裴礼文数学分析中的典型问题与方法第5章级数练习
  14. fileupload控件的属性_FileUpload控件的配置 .
  15. 外星人aw768键盘设置快捷键
  16. hcia华为认证学习
  17. 打开Excel新窗口的方法
  18. cartographer自动更新地图,2条路径数据合并为1条数据
  19. 让运行ubuntu20.04的笔记本电脑实现关闭盖子自动休眠
  20. 使用Perl编写协议分析脚本 z

热门文章

  1. 树状图栏目切换_AAAI 2020 | 中山大学HCP实验室:基于树状结构策略的渐进强化学习,代码已开源...
  2. python交互式程序设计导论第二周_沧州学堂云Python 交互式程序设计导论搜题公众号...
  3. AttributeError: module ‘grpc.experimental.aio‘ has no attribute ‘StreamUnaryCall‘
  4. spark 提交任务到集群
  5. Python center 用法
  6. python怎么新建工程_pycharm新建一个python工程步骤
  7. 数据中台实战(一):以B2B电商亿订为例谈数据埋点(产品经理视角)
  8. Flink从入门到精通100篇(四)-基于 Flink 和 Drools 的实时日志处理
  9. WordCount运行详解
  10. MATLAB基本操作(六):矩阵操作的相关函数