在静态最终 属性 上注入 Guice?

Inject Guice on a static final property?

我有很多 TabularResultSet 的命名注释实例 class 我想传递给多个 classes 到静态最终 属性。我该如何注入?我认为它不喜欢 属性 的最终和静态性质。一定要在属性声明中直接调用注入器赋值吗?

可以让 Guice 注入静态字段。请参阅 Guice 文档中的 Static Injections

但我不确定 static finalfinal 字段还保证它们只被初始化一次(除非使用反射)。 Guice 可以通过使用反射来解决这个问题(我知道 Guice 可以使用反射注入 @Inject private final 字段),但这是一个非常肮脏的解决方案。如果字段的值曾在静态初始化块(对于 static)或构造函数(对于非 static 字段)之外设置,则它不应该具有 final.

但即使可能,也不是一个好主意。静态与依赖注入相反。依赖注入基于好莱坞原则:"don't call us, we'll call you"。您不应该查找来自 Guice 的值,您应该只声​​明您需要它,Guice 会提供给您。