の違いは何ですか
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つのインスタンスを作成します。 ここで参照
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つのインスタンスを作成することは可能です。
違いはありません。どちらもスコープ内のFoo
のインスタンスにバインドされます。FooImpl
SINGLETON