一、什麼是條件註解
根據特定的條件來控制Bean的創建行爲
使用到的註解 @Conditional
二、如何使用條件註解
- 通過實現Condition接口並重寫matches方法(構造判斷條件)來實現一個條件判斷類
- 在配置Bean時使用@Conditional註解,並指定條件判斷類,實現有條件地創建Bean
三、conditionDemo
通過判斷程序在什麼系統下運行,來創建對應的Bean,並輸出該系統下列表展示命令
條件判斷類
package com.cactus.demo.conditional;
import org.springframework.context.annotation.Condition;
import org.springframework.context.annotation.ConditionContext;
import org.springframework.core.type.AnnotatedTypeMetadata;
/**
* Created by liruigao
* Date: 2019-12-05 16:08
* Description:
*/
public class MacCondition implements Condition {
public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
String osName = context.getEnvironment().getProperty("os.name");
System.out.println("osName : " + osName);
return osName.contains("Mac");
}
}
條件判斷類
package com.cactus.demo.conditional;
import org.springframework.context.annotation.Condition;
import org.springframework.context.annotation.ConditionContext;
import org.springframework.core.type.AnnotatedTypeMetadata;
/**
* Created by liruigao
* Date: 2019-12-05 16:13
* Description:
*/
public class WindowsCondition implements Condition {
public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
String osName = context.getEnvironment().getProperty("os.name");
System.out.println("osName : " + osName);
return osName.contains("windows");
}
}
demoBean接口類
package com.cactus.demo.conditional;
/**
* Created by liruigao
* Date: 2019-12-05 16:15
* Description:
*/
public interface IListService {
public void list();
}
demoBean
package com.cactus.demo.conditional;
/**
* Created by liruigao
* Date: 2019-12-05 16:16
* Description:
*/
public class MacListService implements IListService {
public void list() {
System.out.println("mac command: ls");
}
}
demoBean
package com.cactus.demo.conditional;
/**
* Created by liruigao
* Date: 2019-12-05 16:16
* Description:
*/
public class WindowsListService implements IListService {
public void list() {
System.out.println("windows command : dir");
}
}
配置類
package com.cactus.demo.conditional;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Conditional;
import org.springframework.context.annotation.Configuration;
/**
* Created by liruigao
* Date: 2019-12-05 16:04
* Description:
*/
@Configuration
public class ConditionalConifg {
@Bean
@Conditional(WindowsCondition.class)
public IListService windowsListService() {
return new WindowsListService();
}
@Bean
@Conditional(MacCondition.class)
public IListService macListService() {
return new MacListService();
}
}
Main
package com.cactus.demo.conditional;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
/**
* Created by liruigao
* Date: 2019-12-05 16:02
* Description:
*/
public class Main {
public static void main(String[] args) {
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(ConditionalConifg.class);
IListService listService = context.getBean(IListService.class);
listService.list();
context.close();
}
}
Result
WindowsCondition --> osName : Mac OS X
MacCondition --> osName : Mac OS X
mac command: ls