@ConditionOnBean注解添加到类上

@ConditionalOnBean(name = "tom")
@Configuration(proxyBeanMethods = true)
public class MyConfig {@Beanpublic User user01(){User user = new User("zhangsan", tom());return user;}@Beanpublic Cat tom(){return new Cat("xjz");}
}

测试代码

MyConfig myConfig = (MyConfig) run.getBean("myConfig");System.out.println(run.containsBean("user01"));System.out.println(run.containsBean("tom"));

结果

Exception in thread "main" org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'myConfig' available

@ConditionOnBean注解添加到指定方法上面

@Configuration(proxyBeanMethods = true)
public class MyConfig {@ConditionalOnBean(name = "tom")@Beanpublic User user01(){User user = new User("zhangsan", tom());return user;}@Beanpublic Cat tom(){return new Cat("xjz");}
}

测试代码

MyConfig myConfig = (MyConfig) run.getBean("myConfig");System.out.println(run.containsBean("user01"));System.out.println(run.containsBean("tom"));

结果

======
false
true

@ConditionOnBean注解添加到指定方法上面

@Configuration(proxyBeanMethods = true)
public class MyConfig {@Beanpublic Cat tom(){return new Cat("xjz");}@ConditionalOnBean(name = "tom")@Beanpublic User user01(){User user = new User("zhangsan", tom());return user;}
}

测试代码

MyConfig myConfig = (MyConfig) run.getBean("myConfig");System.out.println(run.containsBean("user01"));System.out.println(run.containsBean("tom"));

结果

======
true
true

结论:@ConditionOnBean注解先判断容器里是否存在该实例,如果存在,才能够条件装配该注解对应得@Bean对应的实例或者@configuration类中@Bean对应的实例。所有的判断都是基于注解前容器是否存在注解@ConditionOnBean(name)中的name实例。

通过@ConditionOnBean注解可以做到当一个实例为另一个实例的依赖时,给依赖的@Bean添加@ConditionOnBean注解,使得被依赖的@Bean不存在时依赖的@Bean就无法添加到容器中

在CSDN上看到的更细致的分析

@ConditionOnBean注解的先后顺序对结果的影响相关推荐

  1. Spring Aop 常见注解和执行顺序

    欢迎关注方志朋的博客,回复"666"获面试宝典 来源:juejin.cn/post/7062506923194581029 Spring 一开始最强大的就是 IOC / AOP 两 ...

  2. SQL where 条件顺序对性能的影响有哪些

    经常有人问到oracle中的Where子句的条件书写顺序是否对SQL性能有影响,我的直觉是没有影响,因为如果这个顺序有影响,Oracle应该早就能够做到自动优化,但一直没有关于这方面的确凿证据.在网上 ...

  3. java注解的执行顺序_深入理解Spring的@Order注解和Ordered接口

    前言 Spring的@Order注解或者Ordered接口大家都知道是控制顺序的,那么它们到底是控制什么顺序的?是控制Bean的注入顺序,还是Bean的实例化顺序,还是Bean的执行顺序呢?那么我们先 ...

  4. Jackson 注解 -- 指定输出顺序

    默认情况下,字段的输出顺序和它们在类中的位置一致,我们也可以使用注解 @JsonPropertyOrder 自己指定顺序. package shangbo.jackson.demo12;import ...

  5. java 静态代码块和spring @value注解注入执行顺序

    https://blog.csdn.net/evo_steven/article/details/86005965

  6. MySQL优化--where条件字段的顺序对效率的影响 (02)

    学生表 Student id(编号) name(名字) age(年龄) height(身高) 1 Tommy 26 170 2 Jerry 23 180 3 Frank 30 160 如表所示,这里只 ...

  7. halcon使用点拟合圆形时候,点集顺序紊乱,不影响圆形拟合效果

    read_image (Image, '截图20201226094342972.bmp') * Matching 01: BEGIN of generated code for model initi ...

  8. Spring Boot-@Conditional注解以及衍生注解@ConditionalOnBean

    @Conditional:判断@Conditional指定的条件是否成立,如果成立才会给容器中添加组件,配置类里面的内容才会生效 我们发现有很多的自动配置类,但是这些自动配置类都有指定的条件,必须满足 ...

  9. 【@ConditionOnBean】

    @ConditionOnBean的介绍与使用 @ConditionOnBean 是 Spring Boot 中的一种条件注解,用于在配置类或者组件上指定一个或多个 bean 的条件,只有当指定的 be ...

最新文章

  1. R语言生成仿真的3D高斯簇数据集、使用scale函数进行数据缩放、并使用KMeans进行聚类分析、数据反向缩放并比较聚类生成的中心和实际数据的中心的差异、预测新的数据所属的聚类簇
  2. 蓝牙4.0 vs 蓝牙4.1 vs 蓝牙4.2 vs 蓝牙5.0
  3. Yii CDBCriteria常用方法
  4. 为什么百度查到的ip地址和ipconfig查到的不同;详解公网Ip和私网ip; 网络分类ABC类;
  5. C++ cout格式化输出
  6. v$session v$session_wait
  7. 业务逻辑数据层SqlDataSourcesql的输入参数
  8. 什么叫“职业年金”,与养老保险有什么关系?
  9. bzoj 1676: [Usaco2005 Feb]Feed Accounting 饲料计算(差分)
  10. Font Awesome入门教程
  11. 4600显卡linux驱动,下载:NVIDIA显卡Linux驱动304.64版
  12. 项目管理-Visio可以绘制甘特图编辑操作极方便
  13. 压缩解压缩工具之WinRAR
  14. 教你如何进行苹果屏幕解锁
  15. chrome中验证码图片不显示的解决办法
  16. Linux编辑grldr文件,使用syslinux完美引导GRLDR。
  17. 揪出系统中秘密隐藏的木马(下)
  18. MFC应用程序无法正常启动(0x0150002)。请单击“确定”关闭应用程序
  19. 一套完整的Android通用框架
  20. 超像素经典算法SLIC的代码的深度优化

热门文章

  1. Touchgfx基础入门一
  2. JAVA判断一个数是否为质数
  3. Supplier JAVA_深入理解java1.8之supplier
  4. Ogre 天龙八部地形 Heightmap(高度图)+GridInfo(地表信息)初步结果
  5. iOS LeetCode ☞ 找到字符串中所有字母异位词
  6. 完整的京东联盟自定义推广链接生产程序
  7. 微信小程序之轮播图swiper组件自定义指示点样式
  8. 苹果iOS13.2闷杀后台程序,你游戏APP或游戏有中招?PerfDog狗可以帮提前检测
  9. PTA----打死我也不说
  10. 搬家货运系统软件开发功能