1

私は JavaEE 6 チュートリアルを読んでいましたが、SessionBean と CDI のセクションを読んでいるときに、いくつか疑問に思いました。

1) 私が理解したところでは、@EJBアノテーションは SessionBean を注入し、結果として Dependency Inject パターンが使用されます。このパターンは、誰がどのオブジェクトを構築するかという責任を逆転させることを目的としていることを理解しています。したがって、特定のクラスが独自の依存関係を作成する代わりに、コンストラクターでそれらを受け取ります。@EJBしかし、注釈は依存関係を注入しないという問題をどのように軽減しますか? @Inject注釈も同様です。

2)日付をいくつかの形式(yyyy-MM-dd、dd-MM-yyyyなど)にフォーマットするこのユーティリティクラス(静的メソッドのみを含む)があります。これらのメソッドにはステートレス セッション Bean を使用する方が良いですか、それともユーティリティ クラスを保持する必要がありますか? @InjectこれにEJBを使用する場合、それを使用する場合とアノテーションを使用してBeanを使用する場合の違いは何ですか?

3) 依存性注入を使用する場合、Service Locator または Factory パターンを使用することは理にかなっていますか? (Service Locator がアンチパターンとして文書化されているのを見たことがありますが)。

4

2 に答える 2

2

@EJB と @Inject は、注入しないという問題を軽減します... 注入 (duh! ;))

このユーティリティ メソッドをそれらのクラスに保持します。EJB は、トランザクション管理、リソース使用量の抑制、ユーザーの役割に基づくメソッドへのアクセスの制限などを目的としています。ユーティリティ メソッドにはそのどれも必要ないようです。

せいぜい、そのユーティリティ クラスを CDI 経由で注入可能にすることができます。そのためのインターフェイスを定義し、プロデューサー メソッドを作成します。多くの場合、これはやり過ぎですが、クラスの正確な拡張とその使用法に依存します。

インジェクションを使用してもファクトリを使用できますが (プロデューサーは一種のファクトリです)、クライアントは明示的にファクトリを使用しません。クライアントは依存関係を宣言し、CDI はこれを満たすために「ファクトリー」(プロデューサー) を使用できます。

于 2013-04-14T15:05:32.803 に答える
1
  1. いいえ。依存関係の挿入は、依存関係の作成を回避するだけではありません。また、コンテナにその依存関係を尋ねることを避けることでもあります。コンテナに依存関係を要求する代わりに、コンテナは依存関係をコンポーネントに注入します。「依存関係を注入しないという問題」の意味がわかりません。どうか明らかにしてください。

  2. 通常、セッション Bean は、トランザクション、セキュリティ、および/またはリモート処理の側面をコンテナーによってメソッドに追加する必要がある場合に使用されます。それが単なるユーティリティ クラスである場合、それをセッション Bean にする理由はありません。

  3. いいえ、意味がありません。依存性注入の主な目標は、サービス ロケーターやファクトリの使用を置き換えて、コンテナーに依存性を Bean に注入させることです。これにより、単体テストで偽の依存関係 (モック オブジェクト) を Bean に簡単に挿入できるため、コードを簡単にテストできるようになります。

于 2013-04-14T15:05:22.937 に答える