zoukankan      html  css  js  c++  java
  • @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容器中

  • 相关阅读:
    MySQL(一)
    HTML基础
    python函数基础
    常用的模块
    面向对象进阶
    定制自己的数据类型
    Shell篇之AWK
    MATLAB如何实现傅里叶变换FFT?有何物理意义?
    傅里叶分析
    2018年度关键词
  • 原文地址:https://www.cnblogs.com/dongma/p/10290181.html
Copyright © 2011-2022 走看看