10

我对guice注射有疑问。是否可以将@named 变量值注入静态变量?

我试过了

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

并尝试将此值注入静态变量,例如

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

但是id返回值为 null,当我删除静态修饰符时,id 的值为 1。

这里到底发生了什么?

4

1 回答 1

16

Guice 不会按设计注入静态字段。您可以请求静态注入,但这只能作为拐杖完成

不建议将此 API 用于一般用途,因为它存在许多与静态工厂相同的问题:测试笨拙,使依赖关系不透明,并且依赖于全局状态。

在您的情况下,您可以将其添加到您的configure方法中,让 Guice 注入您的静态字段:

requestStaticInjection(Foo.class);

如果您不添加它,则 Integer 将被初始化为 null(默认情况下)。

但是,我不知道为什么id在删除静态修饰符后设置为 1。如果您的 Guice 模块设置正确,它似乎应该设置为 2。

于 2015-02-14T16:48:10.497 回答