本文主要是介绍spring Conditional是怎么生效的,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
平时看spring源码中经常用到Conditional这个注解,今天来看一下他是怎么生效的
- 其实我是发现Conditional注解是在ConditionEvaluator类的shouldSkip方法中调用了
org.springframework.context.annotation.ConditionEvaluator#shouldSkip
shouldSkip方法有个枚举类型的参数ConfigurationPhase,PARSE_CONFIGURATION
是标示配置解析阶段;REGISTER_BEAN
标示配置注册阶段
/*** The various configuration phases where the condition could be evaluated.*/enum ConfigurationPhase {/*** The {@link Condition} should be evaluated as a {@code @Configuration}* class is being parsed.* <p>If the condition does not match at this point, the {@code @Configuration}* class will not be added.*/PARSE_CONFIGURATION,/*** The {@link Condition} should be evaluated when adding a regular* (non {@code @Configuration}) bean. The condition will not prevent* {@code @Configuration} classes from being added.* <p>At the time that the condition is evaluated, all {@code @Configuration}s* will have been parsed.*/REGISTER_BEAN}
- 接着发现shouldSkip方法是在ConfigurationClassParser类的processConfigurationClass方法中进行了调用
org.springframework.context.annotation.ConfigurationClassParser#processConfigurationClass
回到ConfigurationClassParser
这个类就比较好理解,说明还是在解析配置阶段根据Conditional
注解进行处理的
ConfigurationClassParser 解析配置流程,点击查看
参考文档中对Conditional注解有更详细的讲解
这篇关于spring Conditional是怎么生效的的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!