- ロジックをきれいに保つことが大切:データアクセス・ビュー層と粗結合に
- SEとEEで提供されているAnnotationは微妙に違う
- リソース参照・インスタンス生成・破棄ができる
- リソース参照:@Resourceによるインジェクト
- ライフサイクル管理:@PostConstructで初期化/破棄 @PreDestory
- 横断的な関心事の実装
- アノテーションでbefore/afterの処理をぶち込める
- interceptor用のアノテーションを定義@InterceptorBinding
- Interceptorの実装コードを書く
ic.proceed
でオリジナルの呼び出しが出来る - 作成したinterceptorの利用
実装レイヤーごとにデータのバリデーションが必要
- 値の検証:アノテーションベースで宣言的にデータ検証ができる
- @Inject/@Qualifier/@Named(限定的に利用)
- new -> Factory -> Abstract Factor -> Service Locator -> DI -> CDI
- 依存性を注入:@Inject
- new:直接インスタンス生成、@Inject:コンテナがインスタンスを生成
- 対象の限定:複数の実装から特定の実装を選びたい
- 複数の実装があるとき@Injectでは解決ができない
- 限定子 @HogeQualifier を指定する
- 新規限定子を定義
- 実装クラスを作成
- Qulifierの実装クラスを選択
定義する場合はわかりやすいパッケージを切るなど
- Immutableにしたいとき:コンストラクタでインジェクトし、メンバに束縛する
- CDIの有効化:JavaEE 7〜デフォルトで有効
- CDIアノテーションを付加したもののみDI対象 @NormalScope @Dependant @Interceptor @Decorator
- CDI Managed Bean とは:コンテキスト情報を持つコンテナ管理のインスタンス
- コンテナがProxyを作成
- java.inject.SingletonではなくApplicationScopedを使う:コンテキスト情報が付加されないため
- ロジックのバージョニング・テスト本番環境での実装きりかえなど:@Alternativeを指定し、配備時にXMLで択一可能
- プライオリティは大きい数が優先
- 実行時にDB変更:アノテーションでDBきりかえ
- 選択子のENUMを定義
- 限定子の作成
- @Produce の定義
@Streotyoeで複数のアノテーションをまとめたものができる
- Observerパターンを適用したイベント通知ができる
- @InjectでEventをインジェクト → インスタンス.fireで発火(同期処理)
- EJB/JMSのアノテーションを使って非同期化対応をするべき