第7章 コンテキストおよび依存関係の挿入 (CDI)
7.1. CDI の概要
7.1.1. コンテキストと依存関係の注入 (CDI)
Contexts and Dependency Injection (CDI) 2.0 は、Enterprise Java Beans (EJB) 3 コンポーネントを Java Server Faces (JSF) 管理対象 Bean として使用できるよう設計された仕様です。2 つのコンポーネントモデルを統合し、Java を使用した Web ベースのアプリケーション向けプログラミングモデルを大幅に簡略化します。CDI 2.0 の詳細は、『JSR 365: Contexts and Dependency Injection for Java 2.0』を参照してください。
JBoss EAP には、JSR-365 のリファレンス実装である Weld が含まれています。
CDI の利点
CDI には以下のような利点があります。
- 多くのコードをアノテーションに置き換えることにより、コードベースが単純化および削減されます。
- 柔軟であり、インジェクションおよびイベントを無効または有効にしたり、代替の Bean を使用したり、非 CDI オブジェクトを簡単にインジェクトしたりできます。
-
デフォルトとは異なる設定をカスタマイズする必要がある場合、任意で
beans.xml
ファイルをMETA-INF/
またはWEB-INF/
ディレクトリーに含めることができます。ファイルは空にすることができます。 - パッケージ化とデプロイメントが簡略化され、デプロイメントに追加する必要がある XML の量が減少します。
- コンテキストを使用したライフサイクル管理が提供されます。インジェクションを要求、セッション、会話、またはカスタムコンテキストに割り当てることができます。
- 文字列ベースのインジェクションよりも安全かつ簡単にデバッグを行える、タイプセーフな依存関係の注入が提供されます。
- インターセプターと Bean が切り離されます。
- 複雑なイベント通知が提供されます。
7.1.2. Weld、Seam 2、および JavaServer Faces 間の関係
Weld は JSR 346: Contexts and Dependency Injection for Java™ EE 1.1 で定義されている CDI の参照実装です。Weld は、Seam 2 と他の依存関係注入フレームワークの影響を受けており、JBoss EAP 6 に含まれています。
Seam 2 の目的は、Enterprise Java Bean と JavaServer Faces 管理対象 Bean を統合することでした。
JavaServer Faces 2.2 では、JSR-344: JavaServer™ Faces 2.2 が実装されます。これは、サーバーサイドユーザーインターフェースをビルドするための API です。