目录

  • @ConditionalOnClass、@ConditionalOnMissingClass
  • @ConditionalOnBean、@ConditionalOnMissingBean
  • @ConditionalOnSingleCandidate
  • @ConditionalOnWebApplication
  • @ConditionalOnProperty
  • 说明

springboot 提供了 @Conditional 系列注解用于校验 bean|组件 是否满足条件|匹配,满足|匹配时标注的@Component体系、@Bean注解才有效,才会作为bean放到容器中。

此处介绍常见的 @Conditional 系列注解。

@ConditionalOnClass、@ConditionalOnMissingClass

指定的类存在|不存在(classpath中要有|没有指定的类)时,才会作为bean放到容器中。

这2个注解的属性、使用方式完全一样。

@Configuration
@ConditionalOnClass(A.class)  //classpath中存在A这个类时,@Configuration才会生效,才会把当前类作为bean放到容器中
public class SysConfig {@Bean@ConditionalOnClass(B.class)  //classpath中存在B这个类时,@Bean才会生效,才会把方法返回值作为bean放到容器中public SysService userserService() {return new SysService();}}

类可以用value属性指定,Class<?>[ ] 形式;也可以用name属性指定,String[ ] 形式。

@ConditionalOnBean、@ConditionalOnMissingBean

容器中有|没有指定的bean时,才会作为bean放到容器中。这2个注解的属性、使用方式完全一样。

我们在用@Bean、@Component之类的注解配置bean时,可以加上@ConditionalOnMissingBean(Xxx.class) ,以避免重复创建bean。

@Configuration
@ConditionalOnMissingBean(A.class)  //容器中有|没有A这个bean时...
public class SysConfig {@Bean@ConditionalOnProperty(B.class)  //容器中有|没有B这个bean时...public SysService userserService() {return new SysService();}}

容器中缺少的bean可以用以下任意一个属性指定

  • value属性:Class[ ] 形式
  • type属性:String[ ] 形式,类名
  • name属性:String[ ] 形式,beanName

@ConditionalOnSingleCandidate

指定的bean已经存在于容器中,且只有单个实例(单个候选者)时,才会作为bean放到容器中。

@ConditionalOnSingleCandidate 是 @ConditionalOnBean 的一种情况,满足前者时一定满足后者,满足后者时不一定满足前者。

@Configuration
@ConditionalOnSingleCandidate(A.class)  //A这个bean已经存在于容器中,且只有单个实例时...
public class SysConfig {@Bean@ConditionalOnSingleCandidate(B.class)  //B这个bean已经存在于容器中,且只有单个实例时...public SysService userserService() {return new SysService();}}

可以用value属性指定,Class[ ] 形式;也可以用type属性指定,String[ ] 形式。

@ConditionalOnWebApplication

要是指定的web应用类型,才会作为bean放到容器中

@Configuration
@ConditionalOnWebApplication(type = ConditionalOnWebApplication.Type.REACTIVE)  //web应用类型是reactive应用时...
public class SysConfig {@Bean@ConditionalOnWebApplication(type = ConditionalOnWebApplication.Type.SERVLET)  //web应用类型是servlet应用时...public SysService userserService() {return new SysService();}}

type指定应用类型,默认值 ANY,表示可以是任何web应用类型。

@ConditionalOnProperty

yml | properties 配置文件中配置的属性满足要求时,才会作为bean放到容器中

@Configuration
@ConditionalOnProperty("spring.profiles.active")  //yml | properties 中配置了 spring.profiles.active 这个属性时...
public class SysConfig {@Bean@ConditionalOnProperty("spring.profiles.include")  //yml | properties 中配置了 spring.profiles.include 这个属性时...public SysService userserService() {return new SysService();}}

常用属性,均可选

  • name、value:互为别名,指定配置项名称,String[ ] 形式
  • prefix:指定配置项前缀,指定了前缀时 name|value 属性可以只写后面部分
  • havingValue:指定期待的值,String 形式

说明

对于 @Conditional 系列注解

  • 因为是校验@Component系列、@Bean的满足条件,所有都可以标注在类上校验 @Component 系列注解的有效性,或者标注在方法上校验 @Bean 的有效性。
  • 如果参数值是数组形式,则要满足全部元素才算满足、匹配
  • 在类名可以区分的情况下,Class、String 形式的类名都可以使用短类名,否则要使用全限定类名

SpringBoot @Conditional系列注解相关推荐

  1. 详解Spring Boot框架中的@Conditional系列注解

    目录 1. @Conditional 注解 2. Spring boot 扩展 1) @ConditionalOnClass和@ConditionalOnMissingClass注解 2) @Cond ...

  2. conditional系列常用注解

    文章目录 背景 注解 @Conditional @ConditionalOnProperty @ConditionalOnBean @ConditionalOnClass @ConditionalOn ...

  3. condition系列注解全面罗列

    在spring某些场景下,我们希望随着某些配置项/类的存在与否,决定一些bean是否被实例化并加载到spring容器. @Conditional系列注解,便是这个问题的解决方案. 文章目录 相关注解罗 ...

  4. SpringBoot conditional注解和自定义conditional注解使用

    conditional注解是Springboot starter的基石,自动装配的时候会根据条件确定是否需要注入这个类. 含义:基于条件的注解. 作用:根据是否满足某个特定条件来决定是否创建某个特定的 ...

  5. springboot学习(五)自动配置原理及@Conditional派生注解

    一.自动配置原理 1.SpringBoot启动的时候加载主配置类,开启了自动配置功能 @EnableAutoConfiguration 分析源码发现 2.@EnableAutoConfiguratio ...

  6. SpringBoot整合RabbitMQ系列--注解的使用

    原文网址:SpringBoot整合RabbitMQ系列--注解的使用_IT利刃出鞘的博客-CSDN博客 简介 本文用实例介绍SpringBoot中RabbitMQ相关的注解. @RabbitListe ...

  7. SpringBoot基础系列-SpringCache使用

    原创文章,转载请标注出处:<SpringBoot基础系列-SpringCache使用> 一.概述 SpringCache本身是一个缓存体系的抽象实现,并没有具体的缓存能力,要使用Sprin ...

  8. springboot mybatisplus 多数据源_【SpringBoot DB 系列】MybatisPlus 多数据源配置

    [SpringBoot DB 系列]Mybatis-Plus 多数据源配置 前面介绍了两种 Mybatis 的数据源配置,当然也少不了 mybatis-plus MyBatis-Plus (opens ...

  9. springboot项目系列-论坛系统05全局异常处理+日志处理+MD5加密

    springboot项目系列-论坛系统05全局异常处理+日志处理使用了spring的AOP 论坛地址:http://www.cywloveyou.top 配置日志 logging:level:root ...

最新文章

  1. 台湾MCI报告:Security SaaS风潮渐起
  2. Modern Control
  3. 精解C++的switch语句
  4. 收集10个顶级的CSS3代码生成器
  5. 三菱q系列plc连接电脑步骤_三菱Q系列PLC与三菱变频器的CC-link通讯技术(我的学习笔记)...
  6. media player的显示模式 winform
  7. php怎么给页面链接,怎么给一个PHP密码访问页面加超链接
  8. android pd px sp 转换
  9. 暴力删除文件(文件夹)之为所欲为
  10. Linux --忘记root密码/su: Authentication failure
  11. DNS配置,主从,子域,转发
  12. oracle 创建用户且只有查看权限
  13. kdj买卖指标公式源码_精品 玩转KDJ【精准买卖提示、源码、副图、说明】
  14. 数据库三大顶级会议 VLDB ICDE SIGMOD
  15. 大学物理实验-仿真实验-示波器的原理
  16. Pure Virtual Function
  17. STM32-MIDI音乐播放程序
  18. 怎样关闭tp-link无线路由器防火墙 型号wr740n
  19. 北航计算机在职研究生多少钱,在职攻读北航研究生需要多少学费?
  20. 性能测试工具ab和wrk

热门文章

  1. 技术管理进阶——你了解成长的全貌吗?
  2. 如何使用Aplayer播放器
  3. linux dc命令,Linux中dc命令起什么作用呢?
  4. C语言打印hello world
  5. php个人博客项目实训报告,PHP个人博客项目------切切歆语博客
  6. 什么是环回接口(Loopback Interface、环回地址)
  7. python儿童宣传-为什么让孩子学Python会这么火?
  8. 基于点灯科技平台的智能开关设计
  9. ORA-00392: log 3 of thread 1 is being cleared, operation not allowed
  10. c语言课程设计--图书/音乐管理系统