@Conditional:根据条件注册组件
创建bean对象
public class Computer {
private String name;
private String version;
/* ... */
}
创建自动配置类
@Configuration
public class MyConfig {
@Bean
@Conditional(WindowsCondition.class)
public Computer windows() {
return new Computer("windows", "10");
}
@Bean
@Conditional(LinuxCondition.class)
public Computer linux() {
return new Computer("linux", "CentOs 7");
}
}
创建condition
public class WindowsCondition implements Condition {
@Override
public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
Environment environment = context.getEnvironment();
String name = environment.getProperty("os.name");
if (name.contains("Windows")) {
return true;
}
return false;
}
}
public class LinuxCondition implements Condition {
@Override
public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
Environment environment = context.getEnvironment();
String name = environment.getProperty("os.name");
if (name.contains("linux")) {
return true;
}
return false;
}
}
测试
public class TestConditional {
public static void main(String[] args) {
AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(MyConfig.class);
ConfigurableEnvironment environment = applicationContext.getEnvironment();
String name = environment.getProperty("os.name");
System.out.println("当前系统:" + name);
/**
* 获取容器内类型为Computer的所有bean实例
*/
String[] beans = applicationContext.getBeanNamesForType(Computer.class);
for (String s : beans) {
System.out.println(s);
}
/**
* 获取容器内类型为Computer的所有bean的map集合
*/
Map<String, Computer> map = applicationContext.getBeansOfType(Computer.class);
System.out.println(map);
}
}
windows下运行结果:
添加虚拟机选项,切换为Linux运行环境
运行结果