我知道我的标题令人困惑。我很难总结我想问什么。我的意思是有一种方法可以使用 guice 来注入(inject)使用绑定(bind)方法实现接口(interface) A 的类,其中注释位于实现接口(interface) A 的类中,而不是在配置方法中绑定(bind)它或在接口(interface) A 中添加 @ImplementedBy 注释.
更新
当我使用 guice 阅读教程时,为了规定某个类实现一个接口(interface),必须使用绑定(bind)。现在有很多方法可以执行绑定(bind)。其中的例子是:
链接绑定(bind):
bind(AInterface).to(Bclass);
此代码将位于扩展抽象模块的类的配置方法中。这告诉 guice 如果它们是需要 AInterface 的依赖项,它可能会注入(inject) BClass 来处理依赖项。
及时绑定(bind):
@ImplementedBy(BClass.class)
public interface AInterface {
}
此示例等效于链接绑定(bind)示例。
现在我读到的所有绑定(bind)都要求我在配置方法或接口(interface)中声明一个类实现了该接口(interface)。这将要求我在每次实现接口(interface)时编辑现有代码。我想要的是简单地让实现接口(interface)的类处理绑定(bind)本身,以免修改现有代码。
就像是
@Exports(AInterface.class)
public BClass implements AInterface{
}
最佳答案
没有办法做到这一点。
正如 RC 在评论中指出的那样,如果您有两个“@Exports
”接口(interface)相同的类,Guice 将不知道该选择哪一个。此外,从类加载的角度考虑:
@ImplementedBy
注释起作用,因为一旦请求的类被加载,它就指向实现,所以 Guice 知道如何找到那个类。 如果要编写
@Exports
注释,Guice 实际上必须已经找到 BClass
才能识别它提供 AInterface
,尽管在任何地方都没有明确引用 BClass
。尽管存在 class-path scanning 解决方案,但它们必须遍历类路径上的每个类,这需要一些时间,而且对于 Guice 来说,默默地做是一件危险的事情。因此,为您正在寻找的案例需要某种显式绑定(bind)是最有意义的。