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容器初始化完成。。。。。
  • 相关阅读:
    【Java8】 @FunctionalInterface 函数式接口
    集合使用copy与mutableCopy的区别
    GCD中的dispatch_sync、dispatch_sync 分别与串行、并行队列组合执行小实验
    podspec文件介绍
    iOS系统app崩溃日志手动符号化
    webView文本长按显示英文
    深拷贝
    view向全屏延伸时的属性设置
    iOS 模拟器截屏快捷键
    mysql 优化常用语句
  • 原文地址:https://www.cnblogs.com/zhangjianbing/p/9816014.html
Copyright © 2011-2022 走看看