java - 用于绑定(bind)在 guice 中实现接口(interface)的类的注释

标签 java guice

我知道我的标题令人困惑。我很难总结我想问的问题。我的意思是有没有一种方法可以使用 guice 使用绑定(bind)方法注入(inject)实现接口(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 将不知道选择哪一个。此外,从类加载的角度考虑:

  • 显式绑定(bind)(linkeduntargeted)起作用是因为模块显式引用它绑定(bind)的每个类,这允许 Guice 找到这些类。
  • JIT bindings工作,因为他们要求他们实现的特定类,这也允许 Guice 找到这些类。
  • @ImplementedBy注释之所以起作用,是因为一旦类 requested 被加载,它就会指向实现,因此 Guice 知道如何找到该类。

如果要编写一个 @Exports 注释,Guice 实际上必须已经找到 BClass 才能识别它提供 AInterface,尽管在​​任何地方都没有明确引用 BClass。虽然 class-path scanning存在解决方案,他们必须遍历类路径上的每个类,这需要一些时间,并且对于 Guice 悄悄地做是一件危险的事情。因此,对于您正在寻找的情况,要求某种显式绑定(bind)是最有意义的。

关于java - 用于绑定(bind)在 guice 中实现接口(interface)的类的注释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21425350/

相关文章:

java - Jersey 和 Google Guice 集成

java - 为什么 guice 不注入(inject)之前实例化的 @SessionScoped 对象?

java - 如何将 Guice 2 集成到 Wicket 中?

java - Spark 数据帧加入范围慢

java - 插入到栈尾

java - 使用 springfox-swagger2 版本 3.0.0-SNAPSHOT 观察错误 "Unable to infer base url"

java - JTable和JComboBox的结合使用

java - 自动扫描指南

tomcat - 在嵌入式 Tomcat 中使用 Guice?

java - 通过相同的代码或应用任何逻辑在所有设备中打开 File-Intent