小编dra*_*fly的帖子

如何使用Guice @Inject到现有的对象层次结构?

我有一个现有的对象层次结构,其中一些对象具有需要注入的字段.此外,还有一些其他对象是使用Google Guice构建的,需要注入对前面描述的对象层次结构中某些对象的引用.我如何使用Guice进行此类注射?

问题是现有层次结构中的对象不是使用Guice构造的,因此默认情况下不受注入过程的影响.当然,有injector.injectMembers()一种方法可以注入现有的对象实例,但它不适用于对象层次结构.

对于那些想知道为什么我不能使用Guice构建提到的对象层次结构的人.此层次结构表示GUI对象,并由GUI框架(Apache Pivot)从声明性GUI描述构建(实际上此过程可以描述为对象反序列化).这样接口构造相当简单,我只想将某些服务引用注入接口对象,反之亦然(对于回调).

我目前要采取的方法如下所述.

为了注入预先存在的对象层次结构,让所有对注入感兴趣的对象实现某些接口,如:

public interface Injectable {
  void injectAll(Injector injector);
}
Run Code Online (Sandbox Code Playgroud)

然后,这些对象将实现此接口,如下所示:

public void injectAll(Injector injector) {
  injector.injectMembers(this);
  for (Injectable child : children)
    child.injectAll(injector);
}
Run Code Online (Sandbox Code Playgroud)

然后我只是mainWindow.injectAll(injector)在层次结构中调用root对象,并注入所有感兴趣的对象.

不是很好的解决方案,但一方面完成工作.另一方面,我需要从这个层次结构中注入对象.我想这可以通过为这些对象实现自定义提供程序来完成.

我的问题有更好的解决方案吗?也许我的方法也有问题?

java user-interface dependency-injection guice

11
推荐指数
1
解决办法
3613
查看次数