可以让某一个Bean 在某些条件下 加入IOC容器, 其他情况下不加IOC容器。
a.准备普通Bean
b.增加条件Bean:
给每个bean设置条件, 必须实现Condition接口
如:
//OilCarCondition类
public class OilCarCondition implements Condition {
//如果当前环境时燃油,则加入OilCar
@Override
public boolean matches(ConditionContext conditionContext, AnnotatedTypeMetadata annotatedTypeMetadata) {
//获取环境
Environment environment = conditionContext.getEnvironment();
String carType = environment.getProperty("car.type");
if(carType.contains("oil")){
return true;
}
return false;
}
}
注:
1.当环境变量car.type="oil"时对应的对象才会在IOC容器中创建;
2.环境变量car.type的设置:
Run -> Edit Configurations -> VM options
c.根据条件,将bean加入IOC容器
如:
//在MyConfig配置类中
@Bean
@Conditional(OilCarCondition.class)
public ICar oilCar(){
return new OilCar();
}
@Bean
@Conditional(EnergyCarCondition.class)
public ICar energyCar(){
return new EnergyCar();
}