zoukankan      html  css  js  c++  java
  • Spring源码窥探之:Condition

    采用注解的方式来注入bean

    1. 编写config类

    /**
     * @author 70KG
     * @Title: ConditionConfig
     * @Description:
     * @date 2018/7/22下午3:50
     * @From www.nmyswls.com
     */
    @Configuration
    public class ConditionConfig {
    
        @Conditional(ConditionMatch1.class)
        @Bean
        public Goods m1() {
            System.out.println("将zhang放入IOC中。。。。");
            return new Goods("zhang", 24);
        }
    
        @Conditional(ConditionMatch2.class)
        @Bean
        public Goods m2() {
            System.out.println("将jian放入IOC中。。。。");
            return new Goods("jian", 25);
        }
    
        @Bean
        public Goods m3() {
            System.out.println("将bing放入IOC中。。。。");
            return new Goods("bing", 26);
        }
    
    }

    2. 编写condition类

    /**
     * @author 70KG
     * @Title: ConditionMatch1
     * @Description:
     * @date 2018/7/22下午3:53
     * @From www.nmyswls.com
     */
    public class ConditionMatch1 implements Condition {
    
        // conditionContext:判断条件可以使用的上下文环境
        // annotatedTypeMetadata:注解的信息
        @Override
        public boolean matches(ConditionContext conditionContext, AnnotatedTypeMetadata annotatedTypeMetadata) {
            Environment environment = conditionContext.getEnvironment();
            String property = environment.getProperty("os.name");
            if (property.contains("Mac")) {
                System.out.println("=====================");
                return true;
            }
            return false;
        }
    }

    可见它实现了condition接口,目的就是在bean注入容器之前进行判断,符合条件的才注入容器。

    3.编写测试类

    /**
     * @author 70KG
     * @Title: FutureTaskTest
     * @Description:
     * @date 2018/7/22下午3:49
     * @From www.nmyswls.com
     */
    public class Test01 {
    
        public static void main(String[] args) {
    
            // IOC容器创建(容器类似一个Map)
            AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(ConditionConfig.class);
    
            System.out.println("IOC容器初始化完成。。。。。");
    
        }
    
    }

    4. 测试结果:

    =====================
    将zhang放入IOC中。。。。
    将bing放入IOC中。。。。
    IOC容器初始化完成。。。。。
  • 相关阅读:
    剑指 Offer 26. 树的子结构
    99. 恢复二叉搜索树(困难)
    93. 复原IP地址
    剑指 Offer 20. 表示数值的字符串
    100. 相同的树
    336. 回文对
    12. 整数转罗马数字(贪心!)
    块链技术在数据中心应用的成与败
    新型大脑启发式学习方法来了,可帮助人工神经网络节省内存和能量
    混合多云为何具有技术优势
  • 原文地址:https://www.cnblogs.com/zhangjianbing/p/9816014.html
Copyright © 2011-2022 走看看