CDIメモ
ナビゲーションに移動
検索に移動
注意 : このページ「CDIメモ」は、現在書きかけの状態です。完成版に向けて、今後加筆・修正します。また、本ページの内容は全体的な整合性が取れていない可能性があります。 |
JSR 299で定義されているCDIのサンプルコードです。CDIに関する日本語のドキュメントが無いので、作成してみようと思った次第です。
環境
- GlassFish : 3.1.2
シンプルなCDIサンプル
呼び出し側
package tmp;
import java.io.IOException;
import javax.inject.Inject;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/Main00")
public class Main00 extends HttpServlet {
@Inject
private CdiTest cdi;
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
cdi.hello();
}
}
Injectionクラス
package tmp;
public class CdiTest {
public CdiTest() {
System.out.println("init.");
}
public void hello() {
System.out.println("hello.");
}
}
実行結果
以下、ブラウザでサーブレットを複数回呼び出したときのログです。
情報: init.
情報: hello.
情報: hello.
情報: hello.
情報: hello.
サーブレット初回コール時に、CdiTestのコンストラクタが呼ばれ、インスタンスが使い回しされます。
@Produces を使用したサンプル
@Produces アノテーションを使用すると、インスタンスを取得するためのメソッドを指定できます。
サンプルコード
package tmp;
import javax.enterprise.inject.Produces;
public class Producer {
@Produces
public static CdiTest getCdiTest() {
System.out.println("factory method has called.");
return new CdiTest();
}
}
CdiTest クラスには @Any アノテーションを付与します。
package tmp;
import javax.enterprise.inject.Any;
@Any
public class CdiTest {
public CdiTest() {
System.out.println("init.");
}
public void hello() {
System.out.println("hello.");
}
}
実行結果
情報: factory method has called.
情報: init.
情報: hello.
情報: hello.
情報: hello.
更新履歴
- 仮ページ作成 -- 2013年6月30日 (日) 01:51 (JST)