CDI のリファレンス実装である Weld を使って、 JavaSE 環境上で CDI を使う方法をメモする。
#環境
##OS
Windows7 64bit
##Java
1.7.0_25
##Weld
1.1.10.Final
#準備
##Weld の入手
Weld の jar ファイルをダウンロードする。
jar は公式サイトからダウンロードできる。
#実装
##weld-se.jar をクラスパスに追加する
ダウンロードした zip ファイル(weld-1.1.10.Final.zip)を解凍したら、weld-1.1.10.Final\artifacts\weld\weld-se.jar
をクラスパスに追加する。
この jar に必要なライブラリとかが全部入っているらしい。中を見ると、 javassist とかが入ってる。
##beans.xml の配置
クラスパスが通っている場所に META-INF
というフォルダを作成し、 beans.xml
というファイルを作成する。
ファイルは作るだけで、中は空で良い。
これは CDI の仕様上必要なファイルで、このファイルがあると CDI が有効になる。多分。
##Java の実装
簡単な Hello World を実装してみる。
package cdi;
import javax.inject.Inject;
import org.jboss.weld.environment.se.Weld;
import org.jboss.weld.environment.se.WeldContainer;
public class MyApplication {
public static void main(String[] args) {
Weld weld = new Weld();
WeldContainer container = weld.initialize();
MyApplication application = container.instance().select(MyApplication.class).get();
application.run();
weld.shutdown();
}
@Inject
private Speaker speaker;
public void run() {
this.speaker.speak();
}
}
package cdi;
public interface Speaker {
void speak();
}
package cdi;
public class EnglishSpeaker implements Speaker {
@Override
public void speak() {
System.out.println("Hello World!!");
}
}
Hello World!!
###説明
public class MyApplication {
public static void main(String[] args) {
Weld weld = new Weld();
WeldContainer container = weld.initialize();
MyApplication application = container.instance().select(MyApplication.class).get();
application.run();
weld.shutdown();
}
}
Java SE 環境で CDI(Weld)を使用する場合は、最初に Weld のコンテナを初期化する。
ここでは、 MyApplication の main メソッドでコンテナの初期化をしている。
コンテナの初期化は、 Weld#initialize() メソッドで実行。
取得した WeldContainer から、 MyApplication クラスのインスタンスを取得し、その後の処理を実行している。
最後は Weld#shutdown() メソッドでコンテナを終了させる。
#参考