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生效

posted @   享受生活2023  阅读(74)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示