Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 用于绑定在guice中实现接口的类的注释_Java_Guice - Fatal编程技术网

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

Java 用于绑定在guice中实现接口的类的注释,java,guice,Java,Guice,我知道我的标题令人困惑。我很难总结我想问的问题。我的意思是,有没有一种方法可以使用guice来注入使用绑定方法实现接口a的类,其中注释位于实现接口a的类中,而不是在configure方法中绑定它或在接口a中添加@ImplementedBy注释 更新 当我阅读使用guice的教程时,为了说明某个类实现了一个接口,必须使用绑定。现在有很多方法可以执行绑定。例如: 链接绑定: bind(AInterface).to(Bclass); 此代码将位于扩展抽象模块的类的configure方法中。这告诉g

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

这是不可能的

正如RC在评论中所指出的,如果有两个类都“
@Exports
”在同一个接口上,Guice将不知道选择哪个类。此外,从类加载的角度考虑:

  • 显式绑定(或)起作用,因为模块显式引用它绑定的每个类,这允许Guice查找这些类
  • 工作是因为它们要求实现特定的类,这也允许Guice查找这些类
  • 注释可以工作,因为一旦加载了请求的类,它就指向实现,因此Guice知道如何查找该类

如果要编写
@Exports
注释,Guice实际上必须已经找到
BClass
,以便识别它提供了
AInterface
,尽管在任何地方都没有明确引用
BClass
。虽然存在解决方案,但它们必须在类路径上的每个类中穿行,这需要一些时间,而且对于Guice来说,静默地完成这件事是危险的。因此,对于您正在寻找的案例,需要某种明确的绑定是最有意义的。

您能详细说明一下吗?也许发布一些代码示例,展示您想要做的事情(伪代码或无法编译的代码,如果它显示了您的意图就可以了),我已经更新了我的问题。我希望现在更清楚。我不认为你能做到这一点,可以有许多
AInterface
的实现,所以哪一个是注释的,如果两个是注释的。。。另外,您的
b类
应该显式实现
AInterface
很抱歉忘记显式实现。我知道可以有很多实现。我只是觉得如果我决定使用不同的实现,更新现有代码会很麻烦。但是如果没有其他方法,那么我想我别无选择。要更改实现:普通方法,您需要更改现有的
bind
;按照您的方式,从现有的注释(即现有代码!)中删除注释,并将其添加到新的实现中。我看不出在难度或工作量上有任何区别,它描述了一种模糊相关的方式,如何通过查看BClass来自动检测接口,这可能会被用来编写一些自动逻辑的东西,正如上面所寻求的那样,如果BClass已经连接到其他地方。