四、【注解】Spring注解@Conditional

采用注解的方式来注入bean

  1. 编写config类
/**
 * @author zhangjianbing
 * time 2020/09/23
 * https://www.zhangjianbing.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);
    }

}
  1. 编写condition类
/**
 * @author zhangjianbing
 * time 2020/09/23
 * https://www.zhangjianbing.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注入容器之前进行判断,符合条件的才注入容器。

  1. 编写测试类
/**
 * @author zhangjianbing
 * time 2020/09/23
 * https://www.zhangjianbing.com
 */
public class Test01 {

    public static void main(String[] args) {

        // IOC容器创建(容器类似一个Map)
        AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(ConditionConfig.class);

        System.out.println("IOC容器初始化完成。。。。。");

    }

}
  1. 测试结果:
=====================
将zhang放入IOC中。。。。
将bing放入IOC中。。。。
IOC容器初始化完成。。。。。
posted @ 2020-09-23 08:39  在谷歌上百度  阅读(150)  评论(0编辑  收藏  举报