Guice:所有者の注入方法に応じて、注入されるタイプを変更します
-
10-07-2019 - |
質問
特定のタイプの複数のインスタンスを必要とするguiceベースのアプリがあるため、依存関係を明確にするために名前付きアノテーションを使用する予定です。ただし、このタイプの依存関係は、どちらを取得するかによっても異なります。
説明のために、私が持っていると言ってみましょう
@Singleton
public class FooCache {
private final FooCacheListener listener;
@Inject
public FooCache(FooCacheListener listener) {
this.listener = listener;
}
// do stuff
}
そして2つの別々のインスタンスが必要だと言ってみましょう
@ThatOne FooCache
1つのクラスで
@ThisOne FooCache
別の。
ここで、それぞれの場合に異なるリスナーが必要だとしましょう(1つはデータベースに何かを書き込み、もう1つはJMSまたは分散キャッシュに通知を送信する場合があります)。どうすればいいですか? FooCacheListenerに名前を付けることはできません。ある状況では別の名前が必要になりますが、ここには1つの場所しかありません。これを行うことを考えることができる唯一の方法はFooCacheをサブクラス化することですが、それは私にとって本当に不器用なアプローチのようです。
乾杯 マット
解決
PrivateModulesを使用できる場合があります。 ここに移動して、方法を教えてください似ているがわずかに異なるオブジェクトのツリーを2つ構築しますか?これは、同じクラスの2つの異なるインスタンスを作成する方法です。 「左」の代わりにcachelistenersを渡すことができます。および「正しい」例で渡されます。 それがあなたが望むもののように見える場合、そこから詳細を含むリンクがさらにあります。
別のオプションとして、上記のリンクでも説明されている Guiceを介してオブジェクトを作成するときにパラメーターを渡す方法
所属していません StackOverflow