如何通过另一个实例重写注入



我有一个不能更改的类:

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实例,但所有其他依赖关系是相同的?

如果我使用spring,我可以在上下文文件中创建一个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>

因此,我显式地重写一个属性,所有其他的autowired。

你需要使用privatemomodules阅读关于我如何构建两个相似但略有不同的对象树?

一些伪代码给你一个感觉:

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行多一点但这是类型安全的,代码不需要任何插件就可以完成工作,你甚至可以在模块中放入一些逻辑,等等;)

最新更新