「CDIメモ」の版間の差分
ナビゲーションに移動
検索に移動
(ページの作成: {{Stub}} Category:ソフトウェア開発 Category:Java JSR 299で定義されているCDIのサンプルコードです。CDIに関する日本語のドキュメン...) |
(→更新履歴) |
||
74行目: | 74行目: | ||
サーブレット初回コール時に、CdiTestのコンストラクタが呼ばれ、インスタンスが使い回しされます。 | サーブレット初回コール時に、CdiTestのコンストラクタが呼ばれ、インスタンスが使い回しされます。 | ||
== @Produces を使用したサンプル == | |||
@Produces アノテーションを使用すると、インスタンスを取得するためのメソッドを指定できます。 | |||
=== サンプルコード === | |||
<source lang="java"> | |||
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(); | |||
} | |||
} | |||
</source> | |||
CdiTest クラスには @Any アノテーションを付与します。 | |||
<source lang="java"> | |||
package tmp; | |||
import javax.enterprise.inject.Any; | |||
@Any | |||
public class CdiTest { | |||
public CdiTest() { | |||
System.out.println("init."); | |||
} | |||
public void hello() { | |||
System.out.println("hello."); | |||
} | |||
} | |||
</source> | |||
=== 実行結果 === | |||
<source lang="text"> | |||
情報: factory method has called. | |||
情報: init. | |||
情報: hello. | |||
情報: hello. | |||
情報: hello. | |||
</source> | |||
== 更新履歴 == | == 更新履歴 == | ||
* 仮ページ作成 -- 2013年6月30日 (日) 01:51 (JST) | * 仮ページ作成 -- 2013年6月30日 (日) 01:51 (JST) |
2013年6月29日 (土) 17:01時点における版
注意 : このページ「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)