【发布时间】:2011-08-19 15:46:15
【问题描述】:
我想开始使用 Guice 3.x 神奇地注入我的 java.util.logging.Logger 实例。
这是我尝试开始工作的一段代码:
@Singleton
public class Main
{
@Inject
private static final Logger logger;
...
}
这似乎不起作用。
无论我在声明中使用什么范围,我都会得到Exception in thread "main" java.lang.NullPointerException。
我在configure() 方法中将super.requestStaticInjection(Main.class); 行添加到我的module 并开始工作,但前提是我删除final 关键字并使其成为static Logger logger。
如果可能的话,我宁愿保留 Logger final。
Guice 的正确惯用方式是什么?
【问题讨论】:
-
我不做Guice,但对我来说注入
static final“property”(它实际上是一个常量)是完全不可能的。我知道的所有依赖注入框架也不允许这样做。如果你摆脱了这些限制,它会起作用吗? -
将其更改为
@Inject public Logger logger以及介于两者之间的所有范围,但仍然出现错误。我喜欢将任何不可变的东西标记为final,并且在每个对象上都有一个Logger的实例并不好。 -
嗯,这可能是指南配置问题。顺便说一句,您会遇到什么错误?熟悉 Guice 的人或许可以通俗地为您翻译,让您了解原因,从而找到解决方案。
-
@BalusC,你是完全正确的。 Guice 无法设置最终的静态属性。这就是 Java 的设计方式以及 final 修饰符的用途。
标签: java logging guice idioms java.util.logging