在Guice注入器内部运行时,@ new在@ new`-ed类中不受尊重

Tho*_*sen 1 java debugging guice

我们有一个Swing应用程序,我们想添加一点依赖注入使用Guice-3.0.我们的理由是将旧工厂迁移到更灵活的地方.

我确保应用程序在一个注入器中运行,我们现在希望有一个类向下有一些字段@Inject'ed,并且在我未经训练的眼睛看来,当这个类的@Inject注释被忽略时" 在跑.

现在的问题是,如果我已经正确理解了第一次在Guice注入器内运行时新的类被保证有其@Inject注释,或者如果在你的代码中有一个或多个new之后这个属性丢失了.

换一种说法:

给定A从Guice获取B的实例,然后B然后创建new C()哪个依次运行new D(),并且D碰巧有@Inject的内部,应该由Guice处理?

如果是的话,我怎样才能在我的Guice配置中添加代码,让我看到Guice正在处理"新的X()"并且正在执行"@Inject setY(Y y)"?我不介意这个日志是否会非常大 - 我只需要验证Guice是否按照我的预期运行.

Col*_*inD 7

不,没有new直接创造的东西由Guice处理......它不会做魔术.Guice的工作方式是它为你创建对象图.您不应该引用Injector类中的内容,也不应该使用它new来创建您想要注入的服务.

以下是您可能拥有的一些选项:

  • 注射CB而不是new荷兰国际集团它.注入DC.
  • 如果您需要在当前正在进行的类中多次创建其中一个或两个new,请注入Provider<C>Provider<D>改为使用get()而不是new.
  • 如果只有在运行时可用的对象需要传递给这些类(基于用户输入或来自其他地方的数据,比如说)来创建它们,您可能需要使用Assisted Inject并注入CFactoryDFactory代替a Provider.
  • 如果你真的找不到更好的方法,你可以injector.injectMembers(Object)用来注入你创造的对象new......但很难说如果你这样做,Guice会帮助你多少.