1

既に作成したデータ アクセス オブジェクトがあると仮定すると、CDI を使用してそれをたとえばサービス クラスに挿入できるようにしたいと考えています。さらに、その DAO の 2 つの実装があります。

CDI についての私の理解では、CDI が挿入する実装を認識できるように、DAO 実装クラスに注釈を付ける必要があるということです。

問題は、DAO が .jar ファイルにあることです。CDI アノテーションを付けることで、非 JavaEE クラスで JavaEE インポートを使用しています。

たとえば、次のクラスがあるとします

public class BusinessService {
    @Inject @SomeMybatisQualifier AccountDAO accountDao;
    ...
}

@Inject アノテーションは javax.inject.Inject から来ています。現在、このサービス クラスは JavaEE 環境に依存しています。

誰かが私に何が欠けているのか説明してもらえますか? アノテーションのないクラスを別のアノテーションのないクラスに注入するにはどうすればよいですか? これは、Spring ではかなり単純です。

4

2 に答える 2

1

十分なクラスがある場合、LightGuard に同意します。しかし、カップルの場合は、 でそれらを作成してみません@Producesか?

独自のプロデューサーを実装する適切な例を次に示します。

CDI および JSF2 を使用した Depedency Inject リクエスト パラメータ

return new MyObject(); と書くことができるはずです。任意の修飾子を追加できます

何が不明確なのかはわかりませんが、要点は次のとおりです。CDI が jar をスキャンして Bean を探すには、beans.xml が必要です。それ以外の場合はスキャンされないため、注入には使用できません。文字列も使用できません。String を注入しようとすると、次のようになります。

@Inject
String myString;

CDI は、瓶と同じように何を与えるべきか見当もつきません。しかし、必要な文字列 (requestparam) を知っているので、CDI にも知らせることができます。どのように?さて@RequestParam、プロデューサーに修飾子を提供し (例をもう一度参照)、クライアント コードで使用する場合は、次のようにします。

@Inject
@RequestParam
String myString;

同じことができます。プロデューサーを用意し、必要なものの新しいインスタンスを作成してから返します。これで、CDI はその特定の Bean に依存性を注入する方法を知ることができます。

ここで、40 個のクラスがあるとします。次に、それらを生成するのが面倒になり、代わりにスキャンされることを確認したい. 次に、独自の小さな拡張機能を作成し、CDI がスキャンしようとしている時期を観察し、追加の jar をスキャンするように指示します。このような拡張機能はおそらく簡単に作成できますが、そのような拡張機能を作成したことがないため、詳細はわかりません。

于 2013-02-05T15:15:47.253 に答える
0

最も簡単な方法は、CDI 拡張機能を作成して jar にクラスを追加し (その jar には beans.xml がないため、CDI によって取得されないため)、メタデータに追加の修飾子を追加することです。

于 2013-01-29T15:27:18.427 に答える