@Conditional({Condition}) : 按照一定的条件进行判断,满足条件给容器中注册bean(springboot中大量使用了)
==============================用下面的示例来掩饰其功能=======================
如果系统是windows,给容器中注册("bill")
如果是linux系统,给容器中注册("linus")
spring配置类中我们需要书写的是:
@Conditional(WindowsCondition.class)
@Bean("bill")
public Person person01() {
return new Person("Bill Gates", 62);
}
@Conditional(LinuxCondition.class)
@Bean("linus")
public Person person02() {
return new Person("linus", 48);
}
随后我们自定义两个判断类:
WindowsCondition:判断是否是windows环境
public class WindowsCondition implements Condition {
public boolean matches(ConditionContext conditionContext, AnnotatedTypeMetadata annotatedTypeMetadata) {
Environment environment = conditionContext.getEnvironment();
String property = environment.getProperty("os.name");
while (property.contains("Windows")) {
return true;
}
return false;
}
}
LinuxCondition:判断是否是linux环境
public class LinuxCondition implements Condition {
public boolean matches(ConditionContext conditionContext, AnnotatedTypeMetadata annotatedTypeMetadata) {
// TODO是否linux系统
//1、能获取到ioc使用的beanfactory
ConfigurableListableBeanFactory beanFactory = context.getBeanFactory();
//2、获取类加载器
ClassLoader classLoader = context.getClassLoader();
//3、获取当前环境信息
Environment environment = context.getEnvironment();
//4、获取到bean定义的注册类
BeanDefinitionRegistry registry = context.getRegistry();
String property = environment.getProperty("os.name");
//可以判断容器中的bean注册情况,也可以给容器中注册bean
boolean definition = registry.containsBeanDefinition("person");
}
}
在测试类中运行结果可知:bill.
如果想在linux中模拟运行按照下列做法即可