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 があります。