CDI (JSR-299)の取扱い
TODO 色々と書き途中です。
基本情報
- 対応バージョン
- JSR-299
DI設定クラス (DBFluteModule)
DBFluteは、generateタスクにて DBFluteのコンポーネントの登録処理が実装されている DBFluteModule を自動生成します。DBFluteが生成したクラスは、Behavior と allcommon のクラスのみ、CDI Portable Extensionsを利用してコンテナに登録されます。 Extensionを登録するための META-INF/services/javax.enterprise.inject.spi.Extension ファイルはgenerateタスクにて生成します。
なお、CDIにより自動でコンテナ管理下にされるのを防ぐため、DBFluteが生成するファイルには beans.xml が含まれません。 CDIを有効化するためには、アプリケーション側で別途 beans.xml を用意し、適切な場所に配置する必要があります。
DIの方法 (Behavior)
DI管理されているコンポーネントクラスにおいて、Behavior のプロパティを定義し、@Inject アノテーションを付与するとインジェクトされます。 コンストラクタパラメータインジェクション、イニシャライザーパラメータインジェクション(セッターインジェクション)、 フィールドインジェクションのいずれの方法も使用できます。
e.g. Inject アノテーションの利用 {Pageクラス} @Java
public class XxxPage {
private final PurchaseBhv purchaseBhv;
protected MemberBhv memberBhv;
@Inject
private MemberStatusBhv memberStatusBhv;
@Inject
public XxxPage(PurchaseBhv purchaseBhv) {
this.purchaseBhv = purchaseBhv;
}
@Inject
public void setMemberBhv(MemberBhv memberBhv) {
this.memberBhv = memberBhv;
}
}
Exampleのススメ
CDI (JSR-299) を使ったExample実装 dbflute-test-dbms-derby があります。