Java 如何理解运行时中是否存在bean?

Java 如何理解运行时中是否存在bean?,java,spring,javabeans,Java,Spring,Javabeans,例如,我有一门课 public class Car{ private Motor motor; public void setMotor(Motor motor){ this.motor = motor; } } 我的豆子看起来像 <bean id="car" class="Car"> <property name="motor" ref="${motorProvider.getAvailableMotor()

例如,我有一门课

public class Car{
     private Motor motor;

     public void setMotor(Motor motor){
          this.motor = motor;
     }   
}
我的豆子看起来像

<bean id="car" class="Car">
    <property name="motor" ref="${motorProvider.getAvailableMotor()}"/>
</bean>

此方法:
motorProvider.getAvailableMotor()
返回我应该使用的bean名称(字符串)

但是当这样的bean(具有这样的名称)没有创建时,可能会出现这种情况。如何检查它?

SPeL;比如:

<property name="motor" value="#(if(${motorProvider} != null) ${motorProvider.getAvailableMotor()})"/>


我想这里也讨论过。如他们之前所说,有关更多信息,请参阅:

有几种模式可供选择。下面是我经常使用的一个:

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
几乎不再具有优势。

试试看:知道bean是否在上下文中有什么意义?当它不存在时,你能做一些有用的事情吗?@Aarondigula如果它不存在,那么我会设置一些默认值。我想,你不理解我的意思)我不想检查空值,我想知道我的上下文中是否有这样的bean。因为如果没有创建这样的bean,spring将导致异常。它看起来很有趣,我将尝试使用它,而不是通过抛出异常(appContext.containsBeanDefinition(w.getName()))进行验证@Sridhar比我必须在上下文中搜索两次bean。这比处理异常更昂贵(上下文越大)。@aaron在这种情况下,您可以尝试使用containsBeanDefinition