@ConditionOnBean注解的先后顺序对结果的影响
@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注解的先后顺序对结果的影响相关推荐
- Spring Aop 常见注解和执行顺序
欢迎关注方志朋的博客,回复"666"获面试宝典 来源:juejin.cn/post/7062506923194581029 Spring 一开始最强大的就是 IOC / AOP 两 ...
- SQL where 条件顺序对性能的影响有哪些
经常有人问到oracle中的Where子句的条件书写顺序是否对SQL性能有影响,我的直觉是没有影响,因为如果这个顺序有影响,Oracle应该早就能够做到自动优化,但一直没有关于这方面的确凿证据.在网上 ...
- java注解的执行顺序_深入理解Spring的@Order注解和Ordered接口
前言 Spring的@Order注解或者Ordered接口大家都知道是控制顺序的,那么它们到底是控制什么顺序的?是控制Bean的注入顺序,还是Bean的实例化顺序,还是Bean的执行顺序呢?那么我们先 ...
- Jackson 注解 -- 指定输出顺序
默认情况下,字段的输出顺序和它们在类中的位置一致,我们也可以使用注解 @JsonPropertyOrder 自己指定顺序. package shangbo.jackson.demo12;import ...
- java 静态代码块和spring @value注解注入执行顺序
https://blog.csdn.net/evo_steven/article/details/86005965
- MySQL优化--where条件字段的顺序对效率的影响 (02)
学生表 Student id(编号) name(名字) age(年龄) height(身高) 1 Tommy 26 170 2 Jerry 23 180 3 Frank 30 160 如表所示,这里只 ...
- halcon使用点拟合圆形时候,点集顺序紊乱,不影响圆形拟合效果
read_image (Image, '截图20201226094342972.bmp') * Matching 01: BEGIN of generated code for model initi ...
- Spring Boot-@Conditional注解以及衍生注解@ConditionalOnBean
@Conditional:判断@Conditional指定的条件是否成立,如果成立才会给容器中添加组件,配置类里面的内容才会生效 我们发现有很多的自动配置类,但是这些自动配置类都有指定的条件,必须满足 ...
- 【@ConditionOnBean】
@ConditionOnBean的介绍与使用 @ConditionOnBean 是 Spring Boot 中的一种条件注解,用于在配置类或者组件上指定一个或多个 bean 的条件,只有当指定的 be ...
最新文章
- R语言生成仿真的3D高斯簇数据集、使用scale函数进行数据缩放、并使用KMeans进行聚类分析、数据反向缩放并比较聚类生成的中心和实际数据的中心的差异、预测新的数据所属的聚类簇
- 蓝牙4.0 vs 蓝牙4.1 vs 蓝牙4.2 vs 蓝牙5.0
- Yii CDBCriteria常用方法
- 为什么百度查到的ip地址和ipconfig查到的不同;详解公网Ip和私网ip; 网络分类ABC类;
- C++ cout格式化输出
- v$session v$session_wait
- 业务逻辑数据层SqlDataSourcesql的输入参数
- 什么叫“职业年金”,与养老保险有什么关系?
- bzoj 1676: [Usaco2005 Feb]Feed Accounting 饲料计算(差分)
- Font Awesome入门教程
- 4600显卡linux驱动,下载:NVIDIA显卡Linux驱动304.64版
- 项目管理-Visio可以绘制甘特图编辑操作极方便
- 压缩解压缩工具之WinRAR
- 教你如何进行苹果屏幕解锁
- chrome中验证码图片不显示的解决办法
- Linux编辑grldr文件,使用syslinux完美引导GRLDR。
- 揪出系统中秘密隐藏的木马(下)
- MFC应用程序无法正常启动(0x0150002)。请单击“确定”关闭应用程序
- 一套完整的Android通用框架
- 超像素经典算法SLIC的代码的深度优化