02、Spring常用注解一@Conditional

@Conditional来指定一定条件下注册组件对像
所有的条件必须实现Condition接口,重写matches方法,来决定组件是否注册。

1. 新建条件类

WindowsCondition

//判断是否是Windows系统
public class WindowsCondition implements Condition {
    @Override
    public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
        //获取当前运行环境信息
        Environment environment = context.getEnvironment();
        //获取当前环境名称
        String osName = environment.getProperty("os.name");
        if(osName.contains("Windows")) {
            return true;
        }
        return false;
    }
}

LinuxCondition

//判断是否是Linux系统
public class LinuxCondition implements Condition {
    @Override
    public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
        //获取当前运行环境信息
        Environment environment = context.getEnvironment();
        //获取当前环境名称
        String osName = environment.getProperty("os.name");
        if(osName.contains("Linux")) {
            return true;
        }
        return false;
    }
}

2. 新建配置类

@Configuration
public class Cap5MainConfig {

    @Bean
    public Person person() {
        System.out.println("将person加入ioc容器");
        return new Person("person", 15);
    }

    @Conditional(WindowsCondition.class)
    @Bean
    public Person zhgangsan() {
        System.out.println("将zhgangsan加入ioc容器");
        return new Person("zhgangsan", 15);
    }

    @Conditional(LinuxCondition.class)
    @Bean
    public Person lisi() {
        System.out.println("将lisi加入ioc容器");
        return new Person("lisi", 15);
    }
}

3.新建测试类

public class Cap5Test {
    @Test
    public void test() {
        AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(Cap5MainConfig.class);
        System.out.println("IOC容器加载完成");
    }
}

因为当前开发环境为windows10,所以将person,zhgangsan都加入IOC容器中,
执行测试类结果如下:
在这里插入图片描述

设置vm的变量来模拟Linux环境,Run Configurations->VM options
添加 Dos.name=Linux

在这里插入图片描述

再次执行测试类,结果如下
在这里插入图片描述

说明通过@Conditional条件注册bean生效

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章