我有一个不能更改的类:
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;
}
如何使一个模块配置,使bean1
和bean2
注入不同的实例有不同的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行多一点但这是类型安全的,代码不需要任何插件就可以完成工作,你甚至可以在模块中放入一些逻辑,等等;)