Programmatic CDI

このエントリはJavaEE Advent Calendar 2012 第16日目のエントリです。
昨日は @kokuzawa さんの「Point-to-Point on JMS」でした。
明日は @yumix_h さんの「JAX-RSでファイルアップロード!」です。

今日のテーマはCDI 1.0 (JSR 299: Contexts and Dependency Injection for the Java EE platform)です。特にAPIからCDIを使う方法について書き留めたいと思います。なお、動作検証はMac OS X 10.8.2 + JDK 1.7.0_05 + GlassFish 3.1.2 で行っています。

CDIの基本

まずはCDIの基本的な使い方について、簡単にまとめておきましょう。キーになるのはスコープとインジェクションポイントです。

スコープ

スコープとは、インスタンスの生存期間のことです。それぞれのアノテーションでクラス、あるいはプロデューサフィールド/メソッドをマークすることによって表します。

// Userクラスをセッションスコープとしてマーク
@SessionScoped
public class User implements Serializable {

}

予め用意されているスコープは

  • @ApplicationScoped
  • @SessionScoped
  • @ConversationScoped (with JSF)
  • @RequestScoped

の4種類です。意味は名前からだいたい想像がつくと思いますが、ConversationScopeは少し特殊かもしれませんね。これはJSFと共に使用するもので、ブラウザタブ毎に複数リクエストに渡って維持することのできるスコープです。 続きを読む Programmatic CDI