• 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容器初始化完成。。。。。
  • 相关阅读:
    安装和强行卸载fuse
    Elasticsearch snapshot 备份的使用方法 【备忘】
    MYSQL数据仓库infobright【备忘】
    Tomcat8 启动慢 Creation of SecureRandom instance for session ID generation using [SHA1PRNG] took [53,161] milliseconds
    python爬虫实例
    JDK1.8 JVM参数配置
    QQ登录用到的URL
    CAS5.3.X 配置备忘
    Nexus3忘记admin密码时的解决办法
    CentOS7利用systemctl添加自定义系统服务
  • 原文地址:https://www.cnblogs.com/zhangjianbing/p/9816014.html
Copyright © 2020-2023  润新知