gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-11-01 03:52:34 24 4
gpt4 key购买 nike

我知道我的标题令人困惑。我很难总结我想问的问题。我的意思是有没有一种方法可以使用 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com