2

の違いは何ですか

bind(FooImpl.class).in(Scopes.SINGLETON);
bind(Foo.class).to(FooImpl.class);

bind(Foo.class).to(FooImpl.class).in(Scopes.SINGLETON);

Google Guiceを使用しますか?

編集:

2番目の宣言は、私が取り組んでいるプロジェクトのシングルトンに2つのインスタンスを作成します。 ここで参照

4

2 に答える 2

3

Google Guiceのドキュメントを参照して:

リンクされたバインディングでは、スコープはバインディングターゲットではなく、バインディングソースに適用されます。BarインターフェイスとGrillインターフェイスの両方を実装するクラスApplebeesがあるとします。これらのバインディングにより、そのタイプの2つのインスタンスが可能になります。1つはバー用、もう1つはグリル用です。

bind(Bar.class).to(Applebees.class).in(Singleton.class);
bind(Grill.class).to(Applebees.class).in(Singleton.class);

これは、スコープがバインドされたタイプ(Bar、Grill)に適用され、そのバインドを満たすタイプ(Applebees)には適用されないためです。単一のインスタンスのみを作成できるようにするには@Singleton、そのクラスの宣言にアノテーションを使用します。または、別のバインディングを追加します。

bind(Applebees.class).in(Singleton.class);

したがって、FooImplバインディングを作成する最初の方法ではなく、2番目の方法で2つのインスタンスを作成することは可能です。

于 2012-06-12T19:25:30.953 に答える
0

違いはありません。どちらもスコープ内のFooのインスタンスにバインドされます。FooImplSINGLETON

于 2012-06-12T18:56:07.067 に答える