1

変更できないクラスがあります:

class SomeBean
{
   @Inject private Dep1 dep1;
   @Inject private Dep2 dep2;
   ...
   @Inject private DepN depN;
}

私は私のクラスを持っています:

class MyBean
{
   @Inject@Named("bean1") private SomeBean bean1;
   @Inject@Named("bean2") private SomeBean bean2;
}

bean1bean2が異なる dep2 インスタンスを持つ異なるインスタンスによって注入されるようにモジュール構成を作成するにはどうすればよいですか?ただし、他のすべての依存関係は同じです。

スプリングを使用していた場合、次のようなコンテキスト ファイルで Bean を作成できます。

   <bean class="MyBean">
     <property name="bean1">
       <bean class="SomeBean">
         <property name="dep2" ref="dep2InstanceA"/>
       </bean>
     </property>
     <property name="bean2">
       <bean class="SomeBean">
         <property name="dep2" ref="dep2InstanceB"/>
       </bean>
     </property>
   </bean>

そのため、1 つのプロパティを明示的にオーバーライドし、他のすべてのプロパティを自動配線します。

4

1 に答える 1

4

PrivateModulesを使用する必要があります。「オブジェクトの 2 つの類似しているがわずかに異なるツリーを構築するにはどうすればよいですか?」を参照してください。.

感覚をつかむためのいくつかの疑似コード:

class Bean1Module extends PrivateModule
   bind(Dep2.class).to(Dep2A.class)
   bind(SomeBean.class)
   expose(SomeBean.class).annotatedWith("bean1")

class Bean2Module extends PrivateModule
   bind(Dep2.class).to(Dep2B.class)
   bind(SomeBean.class)
   expose(SomeBean.class).annotatedWith("bean2")

Spring xml 行よりもコード行が少し多いかもしれませんが、これは型安全であり、プラグインなしで完全なコードが機能し、モジュールなどにロジックを入れることもできます;)

于 2013-03-14T15:22:41.190 に答える