[連載] WebLogic Server 12cでJava EE 6を動かしてみよう!(8) CDI第1回

| May 15, 2013
実践! Java EE 6 ロゴ

本連載では、サンプル・アプリケーションの開発を通じてJava Enterprise Edition 6 (Java EE 6)の仕様とその魅力をお伝えすることを目的としています。今回から2回にわたって、Contexts and Dependency Injection for the Java EE platform(CDI)をとりあげます。DIの仕組みは、Java EE 5から一部のJava EEコンポーネントで利用できましたが、Java EE 6からは、より汎用的なCDI(JSR 299)が取り込まれました。CDIは、コンテナ上で管理されているコンテキストに紐付いたDIの仕組みであり、Java EEアプリケーションで利用する上で、一般的なDIフレームワーク以上のメリットがあります。今回はCDIがどのような機能を提供するのか、実際にサンプルコードを動かしながら解説していきます。(日本オラクル Fusion Middleware 事業統括本部 二條智文)

CDI概要

依存性注入(Dependency Injection=DI)というソフトウェア・デザインパターンは、今日ではすでに一般的な用語として定着しており、本記事をご覧の皆様は、実際にプロジェクトで利用されていることが多いと思います。特にSpring FrameworkやGoogle GuiseといったDIフレームワークを活用し、コンポーネントを疎結合とし、チーム開発の効率化やメンテナンス性の向上など、実践レベルで使いこなしているという方も多いのではないでしょうか?

Java EEに着目するとこのようなDIの仕組みはJava EE 5から仕様として取り込まれました。ただ、Java EE 5のDI機能は、限られたコンポーネントのみで、かつDI対象となるコンポーネントの種類ごとに異なるDIの記述方法をしなければならないなど、非常に限定的な仕組みでした。
Java EE 6からは、より汎用的なDIの仕組みとしてCDI(JSR299)が仕様に取り込まれました。CDIは、Java EE 6仕様の中でも、Java EEアプリケーションをコードレベルから構造を改良し、開発に大きな変化をもたらす最も有力な仕様だと考えています。 CDI(Contexts and Dependency Injection)はその名前が表すとおり、次の2つが主要な機能となります。
  • Contexts
    • ステートフル・コンポーネントのライフサイクルや相互の関連性を、明確に定義され拡張可能なライフサイクル・コンテキストにバインドする
  • Dependency Injection