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