Guice注入静态变量

13

我对Guice注入有疑问。是否可能将@Named变量的值注入到静态变量中?

我尝试过。

@Provides
@Named("emp.id")
public Integer getEmpId() {
   return 2;
}

然后尝试将这个值注入到静态变量中,例如

 @Inject
 @Named("emp.id")
 private static Integer id;

但是当我移除static关键字时,id返回了值1。那么这里到底发生了什么?

1个回答

20

Guice的设计不支持注入静态字段。你可以请求静态注入,但这只是一种权宜之计

一般不建议使用此API,因为它和静态工厂一样存在许多问题:测试麻烦、使依赖关系变得不透明,并且依赖于全局状态。

对于您的情况,您可以在configure方法中添加以下内容,以使Guice注入您的静态字段:

requestStaticInjection(Foo.class);

如果你不添加这个,整数将默认初始化为null。

然而,我不知道为什么在移除了静态修饰符后,id会被设置为1。如果你的Guice模块设置正确,它应该被设置为2。


对于未来的用户,同样可以将静态类注入到枚举中。 - Jeya Kumar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接