JSR 299:Contexts and Dependency Injection for Java EEの機能を簡単に調べてみた

Jungle Java - JSR 299 の参照実装 Weld が GAE で動作
この記事を見て、Contexts and Dependency Injection for Java EE(以下、CDIと略)がどんなものか気になった。
JSRということは、Javaの標準のDI仕様になるということで、Java EE 6に入る事も決まっている。
http://journal.mycom.co.jp/news/2009/12/08/010/index.html

というわけで、以下のURLを参考に、その機能を簡単に調べてみた。

CDI(旧名WebBeans)入門 その6 - しんさんの出張所 はてなブログ編
Weld - JSR-299 Reference Implementation

CDIの機能一覧

DIを知っている人前提機能一覧。機能名は、Weldのドキュメントへのリンクになってます。

Injection
DIの基本機能。@Injectionアノテーションで、コンストラクタやフィールドへのインジェクションが可能。
Qualifier
インジェクションする実装を、複数の実装からアノテーションで指定。
Alternatives
インジェクションする実装を、クライアントコードの変更なしに変更。テスト時のモック設定などに使える。
Scope
インジェクションするインスタンスのスコープを指定。組み込みのスコープとして、@RequestScoped, @SessionScoped, @ApplicationScoped, @ConversationScopedが用意されている。
Producer methods
DIコンテナがインスタンス生成できないクラスをインジェクションできるようにする。
Interceptors
AOPの機能。メソッド呼び出しの前後や、インスタンスのライフサイクルに割り込み処理を入れられる。
Decorators
あるJavaインターフェイスのメソッド呼び出し前後に割り込み処理を入れられる。Ineterceptor(AOP)の使い勝手を良くする。
Events
Obeserver/Consumerパターンによるイベント処理を実装しやすくする。
Stereotypes
ScopeやInterceptorなどのアノテーション設定を1つのアノテーション設定にまとめる。
Java EE component environment resources
Java EEコンポーネントのインジェクション。@Resource, @EJB, @PersistenceContext, @PersistenceUnit, @WebServiceRefが用意されている。

所感

Springあたりの一般的なDIコンテナと比べて、特に目新しい機能はないけど、Java EEの標準でサポートするということに意味があるのだろう。逆に開発者から見ると、これからDIを学ぶ人にとっての入り口としてCDIを学ぶのは良いのかも。既存のDIコンテナの特徴を取り込んだ仕様のようだし、Java標準ということで、CDIが普及する可能性もあるだろうし。