【发布时间】:2017-03-13 02:24:38
【问题描述】:
我是 Guice DI 的新手。我想澄清一下我的情况。
简单来说,有没有通过Guice @annotations 替代 MapBinder 的方法?
我的场景:
Interface A{}
Class A1 implements A{}
Class A2 implements A{}
我想注入A的实现类如下,
if(param = One) then Inject A1 to A
if(param = Two) then Inject A2 to A
我知道上面可以用MapBinder完成,但我想通过如下注解来完成,
Class A1 implements A
{
@Inject(param = One)
A1(){}
}
Class A2 implements A
{
@Inject(param = Two)
A2(){}
}
因此,使用 params 注释的类可以根据参数(一或二)自动选择和注入类。
由于@Inject 不能接受参数,在这种情况下覆盖@Inject 会有所帮助吗?如果是这样,我们该怎么做?
或者这种情况只能通过使用 MapBinder 绑定来实现(我不想使用 binder 的原因是我们想显式定义键值对的绑定映射,但使用注释只是简单地注释带参数的实现类 - 更易于维护)。
提前致谢。
【问题讨论】:
-
嗨 - 我相信你会为此使用命名绑定。让类 a 做
@Inject@Named("one")然后将你的注入类绑定到“一”或“二”
标签: java dependency-injection annotations guice guice-3