Spring Bean创建帮助

时间:2011-09-16 06:03:39

标签: spring

要求是我们有一个接口,并且有很多实现。现在,在请求输入的基础上我需要选择实现,例如假设请求Object中有一个clientID参数,并且在clientID的基础上,我需要选择实现类。

<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"/>

可能的解决方案可以是SpEL表达式,但到目前为止,我设法只找到了这个:

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

但是通过这个条件语句,我可以处理最多两个客户端。有没有办法处理两个以上的客户?有没有办法做到这一点?任何帮助都将受到高度赞赏。

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

  1. 使用java配置来定义bean,然后使用switch case来返回相应的bean。
  2. 使用bean的命名参数来查找bean。即在switch map属性中输入bean名称,然后使用context按名称查找类。