前回の記事で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.