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容器中

  • 相关阅读:
    CSS伪元素
    leetcode
    软件镜像下载
    VUE项目问题
    js定时操作
    div 禁止点击
    JS String 与 Object 转换
    实用类
    XML文件的应用
    Socket编程
  • 原文地址:https://www.cnblogs.com/dongma/p/10290181.html
Copyright © 2011-2022 走看看