guice将对象注入哪些类?

时间:2011-09-08 15:08:06

标签: guice

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

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

1 个答案:

答案 0 :(得分:0)

虽然问题不是很清楚,但我会尝试澄清一些注射会发生或不发生的情况,这样你就可以看出你可能面临的问题:

  1. 如果A类有@Inject字段,构造函数或方法,但是在代码中的某个地方直接实例化,那么它通常不会被注入。

  2. 实际上在上述情况下,如果通过调用ModuleinjectMembers()中明确“标记”实例进行注射,则可能会发生注射。

  3. 如果A类有@Inject字段,构造函数或方法,它由Guice创建(通过Injector.getInstance(...)或通过传递注入Guice创建的实例),那么它不是可能注入的字段为null或注入的方法可以使用null调用,除非参数已显式声明@Nullable。如果Guice必须注入一个无法解析依赖项的对象,那么它将抛出异常。

  4. 当然,这是Guice如何注入(或不注入)内容的简化说明。重要的是第3点。这使得我相信注入字段的实例为null并非由Guice创建,而是直接用new实例化。