02、Spring常用注解一@Conditional
@Conditional来指定一定条件下注册组件对像
所有的条件必须实现Condition接口,重写matches方法,来决定组件是否注册。
1. 新建条件类
WindowsCondition
//判断是否是Windows系统
public class WindowsCondition implements Condition {
@Override
public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
//获取当前运行环境信息
Environment environment = context.getEnvironment();
//获取当前环境名称
String osName = environment.getProperty("os.name");
if(osName.contains("Windows")) {
return true;
}
return false;
}
}
LinuxCondition
//判断是否是Linux系统
public class LinuxCondition implements Condition {
@Override
public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
//获取当前运行环境信息
Environment environment = context.getEnvironment();
//获取当前环境名称
String osName = environment.getProperty("os.name");
if(osName.contains("Linux")) {
return true;
}
return false;
}
}
2. 新建配置类
@Configuration
public class Cap5MainConfig {
@Bean
public Person person() {
System.out.println("将person加入ioc容器");
return new Person("person", 15);
}
@Conditional(WindowsCondition.class)
@Bean
public Person zhgangsan() {
System.out.println("将zhgangsan加入ioc容器");
return new Person("zhgangsan", 15);
}
@Conditional(LinuxCondition.class)
@Bean
public Person lisi() {
System.out.println("将lisi加入ioc容器");
return new Person("lisi", 15);
}
}
3.新建测试类
public class Cap5Test {
@Test
public void test() {
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(Cap5MainConfig.class);
System.out.println("IOC容器加载完成");
}
}
因为当前开发环境为windows10,所以将person,zhgangsan都加入IOC容器中,
执行测试类结果如下:
设置vm的变量来模拟Linux环境,Run Configurations->VM options
添加 Dos.name=Linux
再次执行测试类,结果如下
说明通过@Conditional条件注册bean生效