<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.2.12.RELEASE</version>
</dependency>
我们在方法上面使用@Conditional表示匹配的是这个类
@Configuration
public class TestConfig {
@Conditional(Windows.class)
@Bean
public User userWindows(){
System.out.println("给ioc容器中添加数据");
return new User();
}
@Conditional(Linux.class)
@Bean
public User userLinux(){
System.out.println("给ioc容器中添加数据");
return new User();
}
}
public class Test {
public static void main(String[] args) {
ApplicationContext applicationContext=new AnnotationConfigApplicationContext(TestConfig.class);
Environment environment = applicationContext.getEnvironment();
String osName=environment.getProperty("os.name");
System.out.println("---------------------------------");
System.out.println("当前环境:"+osName);
}
}
通过实现Condition,来判断是否满足一些匹配条件
public class Linux implements Condition {
public boolean matches(ConditionContext conditionContext, AnnotatedTypeMetadata annotatedTypeMetadata) {
Environment environment = conditionContext.getEnvironment();
String osName=environment.getProperty("os.name");
if(osName.equals("linux")){
System.out.println(osName);
return true;
}
return false;
}
}
public class Windows implements Condition {
public boolean matches(ConditionContext conditionContext, AnnotatedTypeMetadata annotatedTypeMetadata) {
//获取环境变量
Environment environment = conditionContext.getEnvironment();
String osName=environment.getProperty("os.name");
//如果环境变量是windows那么走这个匹配条件
if(osName.equals("Windows 8.1")){
System.out.println(osName);
return true;
}
return false;
}
}
默认是走的windows环境
![](https://i-blog.csdnimg.cn/blog_migrate/ca9bbd0c3389198dcdfc2ddb4b19e1d0.png)
我们可以给他改一下环境变量
在vm设置-Dos.name=linux
![](https://i-blog.csdnimg.cn/blog_migrate/6fb0ba33587b6c01df43faf84aa6a5cb.png)
这次走的就是linux环境
![](https://i-blog.csdnimg.cn/blog_migrate/3c2b2dca0ad6d34672a7d68a3bc37859.png)
@Conditional也可以加到类上面,表示这个类存在某些条件,他类中的方法才能运行
![](https://i-blog.csdnimg.cn/blog_migrate/4ac55b33f0bc3e6997d0182d78f2f667.png)