10

ギス注射について疑問があります。@named 変数値を静的変数に注入することは可能ですか?

私が試してみました

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

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

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

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

ここで実際に何が起こっているのでしょうか?

4

1 に答える 1

16

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

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

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

requestStaticInjection(Foo.class);

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

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

于 2015-02-14T16:48:10.497 に答える