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