我知道我的头衔令人困惑。我很难总结我想问的问题。我的意思是有一种方法可以使用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{
}
答案 0 :(得分:0)
没有办法做到这一点。
正如RC在评论中指出的那样,如果你有两个“@Exports
”同一个界面的类,Guice就不会知道要选哪一个。此外,从类加载角度考虑它:
@ImplementedBy
注释有效,因为一旦加载了请求的类,它就会指向实现,因此Guice知道如何找到该类。如果要写一个@Exports
注释,Guice实际上必须已经找到BClass
才能识别它提供AInterface
,尽管没有明确提及{{1}任何地方。虽然存在class-path scanning个解决方案,但它们必须遍历类路径上的每个类,这需要花费一些时间,并且对于Guice来说,这是一个危险的事情。因此,对于您正在寻找的案例,需要某种显式绑定才是最有意义的。