第9章 CDI

9.1. CDI の概要

9.1.2. Contexts and Dependency Injection (CDI) について

Contexts and Dependency Injection (CDI) は、EJB 3.0 コンポーネントを Java Server Faces (JSF) 管理対象 Bean として使用できるよう設計された仕様であり、2 つのコンポーネントモデルを統合し、Java を使用した Web ベースのアプリケーション向けプログラミングモデルを大幅に簡略化します。先行する引用符は JSR-299 仕様から除外されました (http://www.jcp.org/en/jsr/detail?id=299 を参照)。
JBoss Enterprise Application Platform には、JSR-299 の参照実装である Weld が含まれます。タイプセーフ依存関係挿入の詳細については、「タイプセーフ依存関係挿入について」 を参照してください。

9.1.3. CDI の利点

  • CDI を使用すると、多くのコードをアノテーションに置き換えることにより、コードベースが単純化および削減されます。
  • CDI は柔軟であり、CDI を使用すると、挿入およびイベントを無効または有効にしたり、代替の Bean を使用したり、非 CDI オブジェクトを簡単に挿入したりできます。
  • CDI で古いコードを使用することは簡単です。これを行うには beans.xmlMETA-INF/ または WEB-INF/ ディレクトリーに配置します。このファイルは空白である場合があります。
  • CDI を使用すると、パッケージ化とデプロイメントが簡略化され、デプロイメントに追加する必要がある XML の量が減少します。
  • CDI により、コンテキストを使用したライフサイクル管理が提供されます。挿入を要求、セッション、会話、またはカスタムコンテキストに割り当てることができます。
  • また、CDI により、文字列ベースの挿入よりも安全かつ簡単にデバッグを行える、タイプセーフな依存関係挿入が提供されます。
  • CDI はインターセプターと Bean を切り離します。
  • CDI では、複雑なイベント通知も提供されます。

9.1.4. タイプセーフ依存関係挿入について

JSR-299 および CDI 以前は、Java で依存関係を挿入するには文字列を使う方法しかありませんでした。この方法では間違いが起きやすいため、CDI によりタイプセーフな形で依存関係を挿入する機能が導入されました。
CDI の詳細については、「Contexts and Dependency Injection (CDI) について」 を参照してください。

9.1.5. Weld、Seam 2、 および JavaServer Faces 間の関係

Seam 2 の目的は、Enterprise Java Bean (EJB) と JavaServer Faces (JSF) 管理対象 Bean を統合することでした。
JavaServer Faces (JSF) は、JSR-314 を実装します。これは、サーバーサイドユーザーインターフェースを構築するための API です。JBoss Web Framework Kit には、JavaServer Faces と AJAX の実装であるRichFaces が含まれます。
Weld は、JSR-299 で定義されているContexts and Dependency Injection (CDI) の参照実装です。Weld は、Seam 2 と他の依存関係挿入フレームワークの影響を受けています。Weld は、JBoss Enterprise Application Platform に含まれます。