1

特定のタイプの複数のインスタンスを必要とする 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 経由または分散キャッシュに通知を送信する場合があります)。どうすればいいですか?ここには 1 つの場所しかないのに、ある状況では別の名前が必要になるため、FooCacheListener に名前を付けることはできません。これを行う唯一の方法は、FooCache をサブクラス化することですが、それは私には非常に不器用なアプローチのようです。

乾杯マット

4

1 に答える 1

2

PrivateModules を使用できる場合があります。ここに移動し、下にスクロールして、似ているがわずかに異なる 2 つのオブジェクトのツリーを作成するにはどうすればよいですか? これは、同じクラスの 2 つの異なるインスタンスを持つ方法であり、まさにあなたがやろうとしていることのように聞こえます。例で渡された「左利き」と「右利き」の代わりに、キャッシュリスナーを渡すことができます。必要なもののように見える場合は、そこから詳細へのリンクがさらにあります。

別のオプションとして、ファクトリを注入することもできます。これについては、上記のリンクでも説明されていますが、Guice を介してオブジェクトを作成するときにパラメーターを渡すにはどうすればよいですか?

于 2009-08-02T21:26:18.283 に答える