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が用意されている。