Springboot @Conditional条件注解原理

在Springboot里经常能看到各种以@Conditional开头的条件注解,比较常见的有@ConditionalOnClass、@ConditionalOnBean,这里看下他们的实现原理。Springboot加载bean可以简单概括为三个阶段:
1、根据配置的扫描路径找到所有需要加载的类,并封装成BeanDefinition注册到Spring容器
2、实例化所有注册到容器的BeanDefinition
3、对已经实例化的bean进行依赖注入
这是最主要的三步,在这过程中还穿插这很多的后置处理器,这些条件注解的判断逻辑是在第一步的时候起作用,用来判断这个类是否满足条件,满足条件则封装成BeanDefinition注册到Spring容器,Springboot通过ComponentScanAnnotationParser的parse方法来扫描并解析所有的bean,在这个方法的里会通过ClassPathBeanDefinitionScanner来扫描类,最终会通过ConditionEvaluator类的shouldSkip方法检查所扫描的类是否符合条件,而逻辑就是通过条件注解上指定的条件判断类的match方法来判断是否符合条件,代码截图如下,有兴趣的可以自己debug下:
在这里插入图片描述

每个条件注解上都会有个@Conditional注解并指定具体的判断逻辑实现类:
在这里插入图片描述

获取注解信息的代码如下:
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值