web-dev-qa-db-ja.com

静的変数でのguiceインジェクション

ガイスインジェクションに疑問があります。 @named変数値を静的変数に挿入することは可能ですか?

私が試してみました

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

この値を次のような静的変数に挿入しようとしました

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

しかし、idの戻り値はnullです。静的修飾子を削除すると、IDによって値が1になりました。

ここで実際に何が起こっているのですか?

10
Robin

Guiceは、設計上、静的フィールドを注入しません。 静的注入を要求する ができますが これは松葉杖としてのみ行う必要があります

このAPIは、静的ファクトリと同じ問題の多くを抱えているため、一般的な使用にはお勧めしません。テストが不器用で、依存関係が不透明になり、グローバル状態に依存します。

あなたの場合、これをconfigureメソッドに追加して、静的フィールドをGuiceに注入させることができます。

requestStaticInjection(Foo.class);

これを追加しない場合、整数はnullに初期化されます(デフォルト)。

ただし、静的修飾子を削除した後、なぜidが1に設定されたのかわかりません。 Guiceモジュールが正しくセットアップされていれば、2に設定されているはずです。

13
condit