1

Spring には、アノテーション ベースと XML ベースの構成があります。前者は迅速な開発に推奨されますが、後者はより柔軟で特殊なケースを処理できます。現在、JUnit テスト用のモックの注入と、外部ライブラリからの Bean の構成の 2 つがあります。

CDI の XML 構成に相当するものが見つからなかったので、私の質問は、そのような Bean の依存性注入をどのように処理するかです。それらは外部ライブラリからのものであり、構成する必要があり、注釈を追加する可能性はありません。

4

2 に答える 2

4

必要に応じて 3 つのソリューションがあります。

プロデューサーを使用する

CDI は、Bean で非 CDI クラスを変換する方法を提供します。プロデューサーといいます。という名前のクラスから Bean を作成する場合は、NonCdiClassそのようなものを作成するだけです。

public class MyProducers {
    @Produces
    public NonCdiClass produceNonCdiClass() {
        return new NonCdiClass();
        };
    }
  }

@Inject必要なときにこの Beanを使用できるようになりました。

クラスには、必要な数のプロデューサー メソッドを配置できます。

プロデュースされた Bean でインジェクションをシミュレートする必要がある場合は、プロデューサー メソッド呼び出しでパラメーターをインジェクトする CDI のおかげで実行できます。

@Produces
public NonCdiClass produceNonCdiClass(MyFisrtBean param1, MySecondBean param2) {
    NonCdiClass res = new NonCdiClass(param1);
    res.setParam(param2);
    return res;
    };
}

この例MyFirstBeanMySecondBeanは、 と は、生成時に CDI によって注入される既存の Bean クラスです。

プロデューサーは、修飾子 (それらまたはそのパラメーター) を持つこともInjectionPoint、CDI 内部 Bean である を注入することもできます。これにより、注入の場所とそれに含まれる注釈の関数で異なる方法で Bean を生成できます。

Weld reference documentationに良いInjectionPoint例があります。

拡張機能を開発する

必要があるかどうかわからないので、ここでは詳しく説明しませんが、AfterBeanValidation フェーズで拡張機能に Bean を登録できます。これらの登録済み Bean は、任意のクラスにすることができます。さらに情報が必要な場合は、ここで開発できます。

Seam Solder (レガシー) を使用するか、Deltaspike 0.6 を待ちます

Solder は構成モジュールを統合しましたが、このプロジェクトはApache Deltaspikeにマージされる過程にあるため、維持されなくなりました。このマージは、バージョン 0.6 の Deltaspike ロードマップ: http://issues.apache.org/jira/browse/DELTASPIKE-271にあります。したがって、Solder config の使用を開始し、機能が追加されたら Deltaspike に切り替えることができます (これはかなり近いはずです)。このソリューションは私のお気に入りではありませんが、Spring 風の設定ファイルが本当に必要な場合は、これが最も近いソリューションです。

于 2013-07-24T10:00:15.127 に答える
1

純粋な CDI は、@Alternativeテスト フェーズ中に を介してたとえばモック オブジェクトを挿入するための注釈を提供しますbeans.xmlが、多くのモック ライブラリはそのために設計されているため、より適切に機能します。

beans.xml耳/戦争自体の外に何かを注入するために使用する方法を知りません。

于 2013-07-24T07:40:53.327 に答える