例如,我有一个班级
public class Car{
private Motor motor;
public void setMotor(Motor motor){
this.motor = motor;
}
}
我的bean看起来像
<bean id="car" class="Car">
<property name="motor" ref="${motorProvider.getAvailableMotor()}"/>
</bean>
此方法:motorProvider.getAvailableMotor()
返回一个bean名称(字符串),我应该使用哪个电机。
但是可能存在没有创建这样的bean(具有这样的名称)的情况。我怎么检查呢?
答案 0 :(得分:13)
有几种模式如何做到这一点。这是我经常使用的一个:
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()
),因此捕获异常通常会更快。< / p>
由于我们捕获了一个说“bean不存在”的特定异常,因此使用if
/ else
几乎没有任何优势。
答案 1 :(得分:2)
SpeI位;类似的东西:
<property name="motor" value="#(if(${motorProvider} != null) ${motorProvider.getAvailableMotor()})"/>
我认为这里也讨论过:Spring - set a property only if the value is not null。如前所述,欲了解更多信息,请参阅:http://static.springsource.org/spring/docs/3.0.5.RELEASE/reference/expressions.html