のGuiceの私の理解では、ということです:Guiceの:フィールドインジェクションの意味合い
は- コンストラクタレベル注入(
@Inject public class Widget(Dep one, Dep two)
)はGuiceのは、常にそれがInjector
を通じて呼び出されるたびにそのコンストラクタを注入します意味。そして - メソッドレベルの注射(
@Inject public void setDepOne(Dep one)
)はGuiceのはいつも長いWidget
オブジェクトはGuiceのInjector
を使用して作成されたように、これら2つの仮定が正しいされており、それが呼び出されるたびに、その方法を注入するを意味しますか?そうでない場合は、明確にしてください!
だから私が悩んでいるのは、フィールドレベル注入の意味は何ですか?
@Inject private Dep one;
これは、オブジェクトがGuiceのインジェクタを介して作成されたときのGuiceは常にプロパティを注入することを意味していますか?その場合、私はコンストラクタレベルの注入と衝突すると思います。例えば
は、競合/エラー、次の原因を行います。事前に
public class Widget {
@Inject private Dep one;
private Dep two;
// Dep one already injected as a field!
@Inject public Widget(Dep one, Dep two) {
// ...
}
}
感謝を!
Guiceは、シングルトンなどの他のバインディングが見つからない限り、それが挿入するすべての依存関係の新しいインスタンスを常に作成します。 – logan
なぜテストにうまくいかないのか説明できますか? – suitianshi
この場合、注入されたフィールドはプライベートなので、リフレクションのようなものを使わずにアクセスするのが難しくなります。 –