@Conditional 原理
1,这里讲的是:org.springframework.context.annotation.Conditional
2,在springConfig文件里注册bean
@Conditional(ColorCondition.class)
@Bean
public Color red() {
Color red = new Color();
red.setName("红色");
red.setWeight("好靓");
return red;
}
3,ColorCondition 代码如下,我们在matches 方法内打一个断点
public class ColorCondition implements Condition{
@Override
public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
String[] colors = context.getBeanFactory().getBeanNamesForType(Color.class);
for (String color : colors) {
if("red".equals(color)) {
return true;
}
}
return false;
}
}
4,断点如下

5,我们往前找,从入口类开始看

6,可以得出结论
①,是在执行AnnotationConfigApplicationContext#reflsh方法,调用invokeBeanFactoryPostProcessors,执行 BeanFactoryPostProcessorr的postProcessBeanDefinitionRegistry 方法
②,会加载bean的定义信息
③,会执行ConditionEvaluator#shouldSkip判断这个类是否应该被跳过
④,然后就会调用我们自定义的ColorCondition#matches方法
⑤,如果返回false,则不会注册对应bean到ioc容器中
@Conditional 原理的更多相关文章
- spring-注解驱动模式
spring web装配原理: /** * WebApplicationInitializer Spring MVC 提供接口. * * Spring中的web自动配置,也是可以, */ /** * ...
- 3springboot:springboot配置文件(外部配置加载顺序、自动配置原理,@Conditional)
1.外部配置加载顺序 SpringBoot也可以从以下位置加载配置: 优先级从高到低 高优先级的配置覆盖低优先级的配置,所有的配置会形成互补配置 1.命令行参数 所有的配置都可以在命令行上进行指定 ...
- CSharpGL(30)用条件渲染(Conditional Rendering)来提升OpenGL的渲染效率
CSharpGL(30)用条件渲染(Conditional Rendering)来提升OpenGL的渲染效率 当场景中有比较复杂的模型时,条件渲染能够加速对复杂模型的渲染. 条件渲染(Conditio ...
- lighttpd与fastcgi+cgilua原理、代码分析与安装
原理 http://www.cnblogs.com/skynet/p/4173450.html 快速通用网关接口(Fast Common Gateway Interface/FastCGI)是通用网关 ...
- Spring Boot 启动原理分析
https://yq.aliyun.com/articles/6056 转 在spring boot里,很吸引人的一个特性是可以直接把应用打包成为一个jar/war,然后这个jar/war是可以直接启 ...
- Golang源码探索(三) GC的实现原理
Golang从1.5开始引入了三色GC, 经过多次改进, 当前的1.9版本的GC停顿时间已经可以做到极短. 停顿时间的减少意味着"最大响应时间"的缩短, 这也让go更适合编写网络服 ...
- spring-boot-2.0.3源码篇 - @Configuration、Condition与@Conditional
前言 开心一刻 一名劫匪慌忙中窜上了一辆车的后座,上车后发现主驾和副驾的一男一女疑惑地回头看着他,他立即拔出枪威胁到:“赶快开车,甩掉后面的警车,否则老子一枪崩了你!”,于是副驾上的男人转过脸对那女的 ...
- Springboot 系列(三)Spring Boot 自动配置原理
注意:本 Spring Boot 系列文章基于 Spring Boot 版本 v2.1.1.RELEASE 进行学习分析,版本不同可能会有细微差别. 前言 关于配置文件可以配置的内容,在 Spring ...
- SpringBoot系列二:SpringBoot自动配置原理
主程序类的注解 @SpringBootApplication 注解,它其实是个组合注解,源码如下: @Target({ElementType.TYPE}) @Retention(RetentionPo ...
随机推荐
- transient关键字的使用
实例说明 在保存对象时,会将对象的状态也一并保存,然而有些状态是不应该被保存的,如表示密码的属性.此时可以使用transient关键字来修饰不想保存的属性. 关键技术 transient关键字用来防止 ...
- 表单/iframe与video标签
<form action="所有表单值提交的地址" method="传值的方式默认是GET方式,还有另一种POST方式"> 表单元素</for ...
- shell中,我们可以通过简单的一个判断来判断命令是否存在
shell中,我们可以通过简单的一个判断来判断命令是否存在 which "Command" > /dev/null if [ $? -eq 0 ] then echo com ...
- Jumpserver之安装在CentOS主机步骤
环境 系统CentOS7.5 IP:172.16.90.248 关闭防火墙设置selinux systemctl stop firewalld setenforce 0 sed -i "s/ ...
- ASP.NET Core 2.2 迁移至 3.0 备忘录
将 ASP.NET Core 2.2 迁移至 ASP.NET Core 3.0 需要注意的地方记录在这篇随笔中. TargetFramework 改为 netcoreapp3.0 <Target ...
- nanoPI编译内核的一些record
我用的nanopi型号为 nanopi NEO,本来想拿来跑一跑需要usb串口读数据的golang程序,NEO居然没有该内核驱动的配置. 官方wiki:http://wiki.friendlyarm. ...
- .Net开发常用工具插件
多功能工具 Notepad++/Sublime Text 3/VS code Web请求工具 Postman .Net开发工具 Microsoft Visual Studio以及代码规范审查插件Sty ...
- weblogic使用wlst脚本实现自动部署
创建weblogic的server和cluster ip="10.20.0.2" nwport=8001 wwport=9001 nwlist=[ ('wtdsrwnw','Clu ...
- 关于Oracle的44951事件
最近有同事遇到某客户数据库产生大量阻塞,等待事件为:enq HW - contention,最开始采用不断杀会话的方式,效果不好,问题一直高频反复.进一步确认SQL是大量的insert,且插入的表中含 ...
- FB面经 Prepare: K closest point to the origin
Give n points on 2-D plane, find the K closest points to origin Based on bucket sort: package fbPrac ...