我对guice注射有疑问。是否可以将@named 变量值注入静态变量?
我试过了
@Provides
@Named("emp.id")
public Integer getEmpId() {
return 2;
}
并尝试将此值注入静态变量,例如
@Inject
@Named("emp.id")
private static Integer id;
但是id
返回值为 null,当我删除静态修饰符时,id 的值为 1。
这里到底发生了什么?
Guice 不会按设计注入静态字段。您可以请求静态注入,但这只能作为拐杖完成:
不建议将此 API 用于一般用途,因为它存在许多与静态工厂相同的问题:测试笨拙,使依赖关系不透明,并且依赖于全局状态。
在您的情况下,您可以将其添加到您的configure
方法中,让 Guice 注入您的静态字段:
requestStaticInjection(Foo.class);
如果您不添加它,则 Integer 将被初始化为 null(默认情况下)。
但是,我不知道为什么id
在删除静态修饰符后设置为 1。如果您的 Guice 模块设置正确,它似乎应该设置为 2。