**
SpringBoot中Condition注解條件的使用
**
小編的場景是:想根據Linux和Windows不同環境而注入不同的Bean
import org.springframework.context.annotation.Condition;
import org.springframework.context.annotation.ConditionContext;
import org.springframework.core.env.Environment;
import org.springframework.core.type.AnnotatedTypeMetadata;
import java.net.InetAddress;
import java.net.UnknownHostException;
public class LinuxCondition implements Condition {
@Override
public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
//1、能擷取到ioc使用的beanfactory
ConfigurableListableBeanFactory beanFactory = context.getBeanFactory();
//2、擷取類加載器
ClassLoader classLoader = context.getClassLoader();
//3、擷取目前環境資訊
Environment environment = context.getEnvironment();
//4、擷取到bean定義的注冊類
BeanDefinitionRegistry registry = context.getRegistry();
Environment environment = context.getEnvironment();
String property = environment.getProperty("os.name");
//此處也可以擷取到配置檔案的資訊,比如擷取配置檔案中的端口
String port = environment.getProperty("server.port");
//若果系統是linux 并且 啟動端口是8080則允許注入bean
if(property.contains("Linux") && port.equals("8080")){
return true;
}
return false;
}
}
使用方法: 此處以配置為例, 在win10本地啟動不注入Bean
import org.springframework.beans.factory.config.ConfigurableBeanFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Conditional;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Scope;
//類中元件統一設定。滿足目前條件,這個類中配置的所有bean注冊才能生效;
//也可以加在方法上。此時隻有這個加了條件的Bean滿足條件才會注入。
@Conditional({LinuxCondition.class})
@Configuration
public class MainConfig {
@Conditional({LinuxCondition.class})
@Bean
public ExtraWork ExtraWork(){
return new ExtraWork();
}
@Bean
public LocalWork LocalWork(){
return new LocalWork();
}
}