用于绑定在guice中实现接口的类的注释

时间:2014-01-29 08:05:53

标签: java guice

我知道我的头衔令人困惑。我很难总结我想问的问题。我的意思是有一种方法可以使用guice来使用绑定方法注入实现接口A的类,其中注释位于实现接口A的类中,而不是在configure方法中绑定它或在接口A中添加@ImplementedBy注释。

更新

当我使用guice阅读教程时,为了指示某个类实现了一个接口,必须使用绑定。现在有很多方法可以执行绑定。其中的例子是: 链接绑定:

bind(AInterface).to(Bclass); 

此代码将位于扩展抽象模块的类的configure方法中。这告诉guice如果它们是需要AInterface的依赖项,它可能会注入BClass来处理依赖项。

及时绑定:

@ImplementedBy(BClass.class)
public interface AInterface {
}

此示例等效于链接的绑定示例。

现在我读取的所有绑定都要求我在configure方法或接口中声明类实现该接口。这将要求我每次实现接口时编辑现有代码。我想要的是简单地让实现接口的类处理绑定本身,以便不修改现有代码。

这样的东西
@Exports(AInterface.class)
public BClass implements AInterface{
}

1 个答案:

答案 0 :(得分:0)

没有办法做到这一点。

正如RC在评论中指出的那样,如果你有两个“@Exports”同一个界面的类,Guice就不会知道要选哪一个。此外,从类加载角度考虑它:

  • 显式绑定(linkeduntargeted)起作用,因为模块显式引用它绑定的每个类,这允许Guice查找这些类。
  • JIT bindings工作是因为他们要求他们实施的具体课程,这也允许Guice找到这些课程。
  • @ImplementedBy注释有效,因为一旦加载了请求的类,它就会指向实现,因此Guice知道如何找到该类。

如果要写一个@Exports注释,Guice实际上必须已经找到BClass才能识别它提供AInterface,尽管没有明确提及{{1}任何地方。虽然存在class-path scanning个解决方案,但它们必须遍历类路径上的每个类,这需要花费一些时间,并且对于Guice来说,这是一个危险的事情。因此,对于您正在寻找的案例,需要某种显式绑定才是最有意义的。