例如,我有一个班级
public class Car{
private Motor motor;
public void setMotor(Motor motor){
this.motor = motor;
}
}
我的豆子看起来像
这个方法:motorProvider.getAvailableMotor()返回一个bean名称(字符串),我应该使用哪个电机.
但是可能存在没有创建这样的bean(具有这样的名称)的情况.我怎么检查呢?
最佳答案
有几种模式如何做到这一点.这是我经常使用的一个:
public class Car{
private Motor motor;
@Autowired
private ApplicationContext applicationContext;
@PostConstruct
public void init() {
try {
motor = applicationContext.getBean( Motor.class );
} catch( NoSuchBeanDefinitionException e ) {
motor = new DefaultMotor();
}
}
}
请注意,您也可以调用applicationContext.containsBeanDefinition(name),但这会搜索您的上下文两次(一次在containsBeanDefinition()中,然后第二次调用getBean()),因此捕获异常通常会更快.
由于我们捕获了一个说“bean不存在”的特定异常,因此使用if / else几乎没有任何优势.