ガイスインジェクションに疑問があります。 @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);
これを追加しない場合、整数はnullに初期化されます(デフォルト)。
ただし、静的修飾子を削除した後、なぜid
が1に設定されたのかわかりません。 Guiceモジュールが正しくセットアップされていれば、2に設定されているはずです。