(version: SpringBoot 2.2.2.RELEASE)

加载 @Configration 类,或者 @Configuration 类里面的 beanMethod 时,通常会用到条件加载,即:@CondtionalOnXxx

1. org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader#loadBeanDefinitionsForConfigurationClass()
    1.1 org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.TrackedConditionEvaluator#shouldSkip()

 

具体的实现代码如下:
org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.TrackedConditionEvaluator#shouldSkip()

public boolean shouldSkip(ConfigurationClass configClass) {
    Boolean skip = this.skipped.get(configClass);
    if (skip == null) {
        if (configClass.isImported()) {
            boolean allSkipped = true;
            for (ConfigurationClass importedBy : configClass.getImportedBy()) {
                if (!shouldSkip(importedBy)) {
                    allSkipped = false;
                    break;
                }
            }
            if (allSkipped) {
                // The config classes that imported this one were all skipped, therefore we are skipped...
                skip = true;
            }
        }
        if (skip == null) {
            // 通过表达式来判断是否要 skip:即 @ConditionalOnBean、@ConditionOnClass、@ConditionalOnMissingClass、@ConditionalOnExpression 等的处理
            skip = conditionEvaluator.shouldSkip(configClass.getMetadata(), ConfigurationPhase.REGISTER_BEAN);
        }
        this.skipped.put(configClass, skip);
    }
    return skip;
}

 

相关文章:

  • 2022-12-23
  • 2021-09-25
  • 2022-12-23
  • 2021-11-25
  • 2021-05-16
  • 2021-07-26
  • 2022-01-08
猜你喜欢
  • 2022-01-01
  • 2021-06-08
  • 2021-04-29
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-01-04
相关资源
相似解决方案