JavaSE 環境でCDI(Weld)を使う

  • 20
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

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 を実装してみる。

MyApplication.java
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();
    }
}
Speaker.java
package cdi;

public interface Speaker {
    void speak();
}
EnglishSpeaker.java
package cdi;

public class EnglishSpeaker implements Speaker {

    @Override
    public void speak() {
        System.out.println("Hello World!!");
    }
}
実行結果
Hello World!!

説明

MyApplication.java
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() メソッドでコンテナを終了させる。

Eclipse プロジェクトの様子

cdi-se-eclipse.jpg

参考