- 实现Condition接口:Linux系统判断条件
// Linux系统判断条件
public class LinuxCondition implements Condition {
/**
-
@description 判断操作系统是否是Linux系统
-
@author ONESTAR
-
@date 2021/2/10 10:56
-
@param conditionContext
-
@param annotatedTypeMetadata
-
@throws
-
@return boolean
*/
public boolean matches(ConditionContext conditionContext, AnnotatedTypeMetadata annotatedTypeMetadata) {
// 获取当前环境
Environment environment = conditionContext.getEnvironment();
// 判断是否是Linux系统
String property = environment.getProperty(“os.name”);
if (property.contains(“linux”)){
return true;
}
return false;
}
}
- 修改配置类,使用@Conditional注解进行条件注入,修改后如下
@Configuration
public class AppConfig {
// 如果WindowsCondition的实现方法返回true,则注入这个bean
@Conditional({WindowsCondition.class})
@Bean
public User user1(){
return new User();
}
// 如果LinuxCondition的实现方法返回true,则注入这个bean
@Conditional({LinuxCondition.class})
@Bean
public User user2(){
return new User();
}
}
这时我们再来运行启动类,默认情况下是Windows系统,可以看到,只有user1注入进去了,user2并没有注入
咱们通过idea配置来模拟改变运行环境:添加:-Dos.name=linux
改变运行环境后,咱们再来运行启动类,可以看到,此时注入的是user2:
三、源码追踪
【1】ConditionEvaluator
中matches
方法
我们知