java – 如何理解bean是否存在于运行时?

前端之家收集整理的这篇文章主要介绍了java – 如何理解bean是否存在于运行时?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

例如,我有一个班级

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几乎没有任何优势.

猜你在找的Spring相关文章