2011-09-16 49 views
0

要求是我们有一个接口并且有很多实现。现在,在请求输入的基础上,我需要选择实现,例如可以说请求对象中有一个clientID参数,并且在clientID的基础上,我需要选择实现类。Spring Bean创建帮助

<bean id = "clientService" class =" com.ecourt.CLientServiceImpl"> 
    <property name="someInterface" ref = "this needs to be changed for every client base on the request Input"/> 
</bean> 

<!-- Below mentioned Beans are Impl of "someInterface" property of above define bean --!> 
<bean id ="clientOneImpl" class = "com.ecourt.clienOneImpl"/> 
<bean id ="clientTwoImpl" class = "com.ecourt.clienTwoImpl"/> 

可能的解决方案可在规划环境地政司表达,但到现在为止,我设法找到了只有这个:

<property name="someInterface" ref="#{clientID =='101'?clientOneImpl:clientTwoImpl}"/> 

但有了这个条件语句,我可以处理最大的两个客户端。有没有办法处理两个以上的客户?有没有办法做到这一点?任何帮助将不胜感激。

+1

您可以为每个实现定义具有clientID作为id属性的bean。通过传递clientID来返回基于给定clientID的实际实现来调用getBean()。 – Pokuri

回答

0

我知道您正在构建基于Spring的应用程序,但这是工厂模式的经典案例。因此,您可以使用它来实现这一点,其中您返回与给定clientID相对应的实现(来自Factory)。

+0

工厂+1:http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/beans.html#beans-factory-class-static-factory-method –

0

有两种解决方案来自我的头脑。

  1. 一个使用java配置来定义bean,然后让switch case返回合适的bean。
  2. 使用bean的命名参数来查找bean。即在切换映射属性中将其命名为bean名称,然后使用上下文按名称查找类。