@Conditional
@Conditional({Condition}):按条件注册Bean
可以加在方法上面,也可以加在类上面;
测试用例:
- 如果系统是windows,给容器中注册(“bill”)
- 如果是linux系统,给容器中注册(“linus”)
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Person {
private String name;
private int age;
}
@Bean
@Conditional({WindowConditional.class})
public Person person02(){
return new Person("Bill",62);
}
@Bean
@Conditional({LinuxConditional.class})
public Person person03(){
return new Person("linus",62);
}
public class WindowConditional implements Condition {
@Override
public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
//获取当前环境信息
Environment environment = context.getEnvironment();
String property = environment.getProperty("os.name");
if(property.contains("Window")){
return true;
}
return false;
}
}
public class LinuxConditional implements Condition {
@Override
public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
//获取当前环境信息
Environment environment = context.getEnvironment();
String property = environment.getProperty("os.name");
if(property.contains("linux")){
return true;
}
return false;
}
}
@Test
public void test03() {
ApplicationContext applicationContext = new AnnotationConfigApplicationContext(MainConfig02.class);
System.out.println("IOC容易创建完成...");
Map<String, Person> beansOfType = applicationContext.getBeansOfType(Person.class);
System.out.println(beansOfType);
}
控制台打印:
IOC容易创建完成... {person02=Person(name=Bill, age=62)}
修改环境变量,将当前虚拟机修改成linunx系统:
控制台打印:
IOC容易创建完成... {person03=Person(name=linus, age=62)}