前回の記事でSpring 2.0の新機能について解説しました。今回はSpring 2.0のAOP(アスペクト指向プログラミング)機能と新しく追加されたWebに対応するBeanスコープについて解説します。
AOPとは、プログラムに対して後付けで処理を織り込む仕組みです。AOPについての詳細は、以前の連載「Spring Frameworkで理解するDI」の第3回「Spring AOPサンプルアプリでAOPを理解する」を参照ください
AOPネームスペースは、Spring AOPの設定を処理するタグを含むネームスペースです。Spring 2.0ではAOP機能が強化されました。特に、AspectJとの統合が強力で、従来のプロキシベースAOPに加えて、「AspectJスタイルのAOP」が利用できるようになりました。
編集部注:AspectJについて詳しく知りたい読者は、@IT情報マネジメント アーキテクチャの記事『AspectJから学ぶアスペクト指向の理解』をご参照ください。
AOPネームスペースではSpringがサポートするさまざまなバリエーションに対応したAOPを利用するためのタグが用意されています。ここでは、AOPネームスペースの利用方法を、サンプルを使って簡単に解説します。
この章で作成するサンプルでは、AspectJの機能を利用してAOPを実現します。AspectJの機能を利用するために、AspectJのライブラリをインストールする必要があります。これらの依存ライブラリはAspectJのダウンロードサイトからダウンロードできます(または、Springのwith-dependenciesディストリビューションにも含まれています。ダウンロードファイル名は「spring-framework-X.X.X-with-dependencies.zip」です)。
Eclipseで以下のライブラリにビルドパスを設定してください。
・aspectjlib.jar
・aspectjweaver.jar
・cglib-X.X.jar(Xはバージョン番号。本稿では、cglib-nodep-2.1_3.jarを利用)
以下(表1)にサンプルプログラムの構成ファイル一覧を表します。
作成するファイル | 概要 | 備考 |
---|---|---|
ao.xml | Spring構成ファイル | 配置場所: %ソースディレクトリ%\ao.xml |
AdviceSample.java | プログラムに後から織り込む処理 | クラス名:net.kronos_jp.aop.AdviceSample |
SampleBean.java | hello()メソッドを持つサービスオブジェクト。AOPによって処理が織り込まれる | クラス名:net.kronos_jp.aop.SampleBean |
SpringStart.java | 起動プログラム。Springのコンテキストを作成し、SampleBeanのhell()メソッドを実行する | クラス名:net.kronos_jp.aop.SpringStart |
表1 サンプルで作成するファイルの一覧 |
Spring IDE 2.0をインストール済みのEclipse(Spring IDE 2.0のインストールについては連載第1回を参照してください)で、ソースディレクトリのルートを選択します。そして、[ファイル(F)]→[新規(N)]→[その他(O)]を選択し、新規ファイル作成の[ウィザード選択ダイアログ]を開いてください。ダイアログ上のツリーから[Spring]→[Spring Bean Definition]を選択したうえで、新しいSpringの構成ファイル名(ここでは、「ao.xml」)を入力し、[次へ >(N)]ボタンをクリックして、ウィザードを進めます。
上記の画面(図2)でAOPネームスペースを読み込むようチェックを付けて[終了(F)]ボタンを押下することで、以下(リスト1)のファイルが作成されます(太字がAOPネームスペースの利用のための記述)。
リスト1 ao.xmlファイルの初期状態(※このファイルには後ほどサンプルに必要な定義を追加記述します) |
<?xml version="1.0" encoding="UTF-8"?> |
次に、サンプルプログラムでAspectを織り込む先のBeanとして「SampleBean.java」(リスト2)を作成します。
リスト2 SampleBean.java |
package net.kronos_jp.aop; |
上記のサンプルロジックを含むSampleBeanを呼び出すための、アプリケーション起動プログラムとして「SpringStart.java」(リスト3)を作成します。
リスト3 SpringStart.java |
public class SpringStart { |
上記のプログラムが動作するようにao.xmlにsampleBeanの定義を追記します(リスト4)。
リスト4 ao.xmlへの追記(1) |
<?xml version="1.0" encoding="UTF-8"?> |
以上が完成したら、SpringStart.javaプログラムを実行してください。以下のようにメッセージが表示されればOKです。この時点では、まだAspectは織り込まれていません。
Hello world!! |
では続けて、このプログラムにAspectを織り込みたいと思います。
サンプルに織り込むAspectとして「AdviceSample.java」(リスト5)を作成します。このクラスはafterHello()というメソッドを持つだけのPOJOです。
編集部注:POJOそのものについて詳しく知りたい読者は、「J2EE Watch 第11回、米JBossは米Red Hatとマーケットシェア拡大を狙う」の「*2:POJO」を参照してください。
このafterHello()メソッドがhello()メソッドの後に実行されるようにAOPで織り込みます。織り込みに利用するメソッド名に制約はありませんので、どのような名称のメソッドを付けることも可能です。
リスト5 AdviceSample.java |
package net.kronos_jp.aop; |
次に、Spring構成ファイルを修正する必要があります。ao.xmlファイルに以下(リスト6)の<aop:config />タグを記述してください。
リスト6 ao.xmlへの追記(2) |
<?xml version="1.0" encoding="UTF-8"?> |
以上の修正が完了したら、SpringStart.javaプログラムを実行してください。以下のようにメッセージが表示されれば完成です。AOP記述によって機能が織り込まれたことが確認できます。
Hello world!! |
次ページで、Spring構成ファイルの詳細(リスト6で使用しているAOPネームスペースのタグ)を解説していきます。
Copyright © ITmedia, Inc. All Rights Reserved.
Java Agile 鬯ッ�ッ�ス�ッ�ス�ス�ス�ョ�ス�ス�ス�ス�ス�ス�ス�ォ�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ェ鬯ッ�ョ�ス�ッ髯具スケ�ス�コ�ス�ス�ス�サ驛「�ァ隰�∞�ス�ス�ス�ス�ス�ス�ス�ソ�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�コ鬯ッ�ョ�ス�」髯具スケ�ス�ス�ス�ス�ス�ス�ス�ス�ス�オ鬯ョ�ォ�ス�エ驕カ謫セ�ス�オ�ス�ス�ス�コ�ス�ス�ス�キ�ス�ス�ス�ス�ス�ス�ス�ク�ス�ス�ス�ス�ス�ス�ス�キ�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ケ鬯ョ�ォ�ス�エ鬮ョ諛カ�ス�」�ス�ス�ス�ス�ス�ス�ス�「�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ウ鬯ッ�ッ�ス�ゥ髯晢スキ�ス�「�ス�ス�ス�ス�ス�ス�ス�「�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ァ�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ュ鬯ッ�ッ�ス�ゥ髯晢スキ�ス�「�ス�ス�ス�ス�ス�ス�ス�「鬯ョ�ォ�ス�エ鬮ョ諛カ�ス�」�ス�ス�ス�ス�ス�ス�ス�「�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ウ鬯ッ�ッ�ス�ゥ髯晢スキ�ス�「�ス�ス�ス�ス�ス�ス�ス�「�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ァ�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ー