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

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