0

アプリケーションにプロセッサ Bean のコレクションと、それらを作成するためのファクトリがあります。

public abstract class Processor {
    public Processor(String config) { .... }
    public abstract void process() throws Exception;
}

public class Processor1 extends Processor {
    public Processor1(String config) { super(config);..}
    public void process() {....}
}

public Processor newProcessor(String impl, String config) {
    // use reflection to create processor
}

CDI を使用してファクトリ クラス/メソッドを置き換えることはできますか? 代わりに @Produces を使用しますか?

以下を使用して、必要なインスタンスを反復または選択してみました。しかし、Weld は allProcessorInstances.isUnsatisfied() == true と教えてくれます。Weld が Processor サブクラスを見つけるために、デフォルトの引数なし ctor を作成する必要がありました。

@Inject @Any Instance<Processor> allProcessorInstances;

使用したいコンストラクターを使用するように CDI コンテナーに指示する方法はありますか? それとも、この問題について間違った方法で考えていますか?

4

1 に答える 1

2

コンストラクターを使用するには、 @Inject でアノテーションを付ける必要がありますが、コンストラクターのすべてのパラメーターは、それ自体が CDI スコープ内の Bean または何かである必要があります。

プロデューサー メソッドを使用して、InjectionPointをパラメーターとして取得すると、構成をアノテーションの一部にすることができます。

于 2012-07-16T17:13:07.957 に答える