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

  • 相关阅读:
    Feign Ribbon Hystrix 关系剖析
    Activiti 分布式方案实现探讨
    Flink任务架构分析
    Activiti 数据库表梳理
    负载均衡方案优缺点探讨
    公文流转系统
    css美化界面
    动手动脑(二)
    csslayui树练习
    css点名
  • 原文地址:https://www.cnblogs.com/dongma/p/10290181.html
Copyright © 2011-2022 走看看