我对Guice注入有疑问。是否可能将@Named变量的值注入到静态变量中? 我尝试过。@Provides @Named("emp.id") public Integer getEmpId() { return 2; } 然后尝试将这个值注入到静态变量中,例如 @Inject @Named("emp.id") private static Integer id; 但是当我移除static关键字时,id返回了值1。那么这里到底发生了什么?
Guice的设计不支持注入静态字段。你可以请求静态注入,但这只是一种权宜之计: 一般不建议使用此API,因为它和静态工厂一样存在许多问题:测试麻烦、使依赖关系变得不透明,并且依赖于全局状态。 对于您的情况,您可以在configure方法中添加以下内容,以使Guice注入您的静态字段:requestStaticInjection(Foo.class); 如果你不添加这个,整数将默认初始化为null。然而,我不知道为什么在移除了静态修饰符后,id会被设置为1。如果你的Guice模块设置正确,它应该被设置为2。