2011-09-08 58 views
0

也许是一个愚蠢的问题,但是...我有一堆代码库,里面有@Inject注释。但是,当应用程序运行并非所有对象都被注入时,某些值为空。guice将哪些类注入到对象?

所以我的问题是:guice如何知道哪些类必须被处理?它以某种方式遍历对象图吗?

+1

什么是null的一些值?这并不十分清楚您的意思...... –

+0

标有@Inject注释的对象的值。他们没有被注射。并且由于它们没有被标记为“可选”,我认为应该注入的课程根本不被guice处理 – Axl

+1

目前还不清楚您试图注入它们的位置。如果可能,请给出一个简短但完整的例子。 –

回答

0

虽然这个问题不是很清楚,我会尽力澄清其中注入将发生或不发生一些情况,所以你可以看到你可能会面临什么样的问题:

  1. 如果类A有@注入字段,构造函数或方法,但直接通过代码中的新位置实例化,那么它通常不会被注入。

  2. 实际上,在上述情况下,如果通过调用injectMembers()将实例显式“标记”为Module中的注射,则可能发生注射。

  3. 如果A类具有@Inject字段,构造函数或方法,并且它由Guice(通过Injector.getInstance(...)或通过在由Guice创建的实例中传递性地注入)创建,那么注入字段是不可能的null或注入的方法与null调用,除非参数已明确声明@Nullable。如果Guice必须注入一个依赖不能被解析的对象,那么它会抛出一个异常。

当然,这是对Guice如何注入(或不注入)内容的简单解释。重要的是第3点。这让我相信注入字段的实例为空并不是由Guice创建的,而是直接用new实例化的。