2011-09-16 22 views
0

私たちにはインターフェイスがあり、その実装が多数あります。さて、要求入力に基づいて、実装を選択する必要があります。たとえば、request ObjectにclientIDパラメータがあり、clientIDに基づいて、実装クラスを選択する必要があります。Spring Bean Creationヘルプ

<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つのクライアントを扱うことができます。 2人以上のクライアントを処理する方法はありますか?これを行う方法はありますか?どんな助けも高く評価されます。

+1

実装ごとにid属性としてclientIDを持つBeanを定義できます。指定されたclientIDに基づいて実際の実装を返すようにclientIDを渡してgetBean()を呼び出します。 – Pokuri

答えて

0

私はあなたがSpringベースのアプリケーションを構築していることを理解していますが、これはFactoryパターンの古典的なケースです。したがって、これを使用して、(ファクトリから)特定のclientIDに対応する実装を返すことができます。

+0

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

0

私の頭の中には2つの解決策があります。

  1. Java設定を使用してBeanを定義し、適切なBeanを返すためのスイッチケースを使用します。
  2. Beanの名前付きパラメータを使用してBeanを検索します。つまりスイッチマップ属性でBean名に変換し、次にコンテキストを使用して名前でクラスをルックアップします。