也许是一个愚蠢的问题,但是......我有一堆代码库,里面有带@Inject注释的类。但是,当应用程序运行时并非所有对象都被注入时,某些值为空。
所以我的问题是:guice如何知道必须处理哪些类?它以某种方式遍历对象图吗?
答案 0 :(得分:0)
虽然问题不是很清楚,但我会尝试澄清一些注射会发生或不发生的情况,这样你就可以看出你可能面临的问题:
如果A类有@Inject字段,构造函数或方法,但是在代码中的某个地方直接实例化,那么它通常不会被注入。
实际上在上述情况下,如果通过调用Module
在injectMembers()
中明确“标记”实例进行注射,则可能会发生注射。
如果A类有@Inject字段,构造函数或方法,它由Guice创建(通过Injector.getInstance(...)
或通过传递注入Guice创建的实例),那么它不是可能注入的字段为null
或注入的方法可以使用null
调用,除非参数已显式声明@Nullable
。如果Guice必须注入一个无法解析依赖项的对象,那么它将抛出异常。
当然,这是Guice如何注入(或不注入)内容的简化说明。重要的是第3点。这使得我相信注入字段的实例为null并非由Guice创建,而是直接用new
实例化。