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容器初始化完成。。。。。
原文地址:https://www.cnblogs.com/zhangjianbing/p/9816014.html