2. アノテーション2007.08.10 株式会社四次元データ 小松一登
Servlet2.5追加機能 2章 アノテーション
Java SEなどで提供されているアノテーションのいくつかが、サーブレットでも使えるようになりました。それらのアノテーションの振る舞いは、サーブレットでの利用を想定したものとしてServlet2.5仕様で規定されています。この章では今回追加されたアノテーションの紹介と、そのうちのいくつかを取り上げての解説を行います。 2.1. @Resourceそれではまず、@Resourceアノテーションについて詳しく紹介します。@Resourceアノテーションでは、サーブレットコンテナに対しリソース注入の要求を行ってくれます。web.xmlの<resource-ref>要素や<env-ref>要素、<resource-env-ref>要素と同じ働きです。これにより、自分でJNDIルックアップを行ったり、web.xmlへのリソース宣言を行う必要がなくなります。 ここではApache Tomcat6を例にとって説明します。まず、サーバの設定ファイルであるserver.xmlにリソース宣言を行い、"jdbc/datasource"というJNDI名でリソースを登録しておきます。 これまでのJNDIルックアップによる方法では、さらにweb.xmlにリソース参照の設定をした上で、以下のようにルックアップを行いリソースを取得していました。(詳しくはこちら) private DataSource ds;
protected void doGet(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException{
try{
Context context = new InitialContext();
ds = (DataSource) context.lookup("java:comp/env/jdbc/datasource");
}catch(Exception e){
・・・
}
そして以下が、今回追加された@Resourceアノテーションを用いた例です。この場合、web.xmlにリソース参照を定義する必要はありません。 @Resource(name = "jdbc/datasource")
private DataSource ds;
protected void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException,IOException{
・・・
}
name属性には、リソースのJNDI名を指定します。JNDIルックアップによる方法より、大分簡単な記述で済むようになりました。また、@Resourceアノテーションはサーブレットのほか、フィルタやリスナーでも使用可能です。 2.2. @PostConstruct, @PreDestroy次に@PostConstructアノテーションと@PreDestroyアノテーションについて紹介します。@PostConstructアノテーションを付与したメソッドは、コンテナの初期化時にリソース注入が行われたあと、ライフサイクルメソッドが呼び出される前に実行されます。一方@PreDestroyアノテーションが付与されたメソッドは、コンテナの終了時、インスタンスが取り除かれる前に実行されます。そのメソッドではリソースの開放などを行うのが典型的でしょう。 2.3. アノテーション一覧今回追加されたアノテーションは他にもあります。以下にその一覧を示します。
これらは現在Servlet2.5仕様にリストアップされているアノテーションであり、今後、利用可能なアノテーションがさらに追加される可能性もあります。これらアノテーションがサーブレットでも使えるようになったおかげで、開発がより楽になると期待できるでしょう。 次回は、web.xmlの構文変更について解説します。 |
![]()
![]()
|