Spring Frameworkで理解するDI(3)
Spring AOPサンプルアプリでAOPを理解する


クロノス
山本大
2005/12/3

本記事は2005年に執筆されたものです。Spring、DI、AOP全般の最新情報は@IT Java Solutuionのカテゴリ「DI×AOP(Spring/Seasarなど)」をご参照ください。

 前回「第2回 Springフレームワークの思想とAOP」ではSpringフレームワークが提供するAOPについて説明しました。今回は実際にコードを読みながら、AOPについて理解します。

サンプルアプリケーションでAOPを理解する

 SpringフレームワークのAOPは、AspectJのような特殊な言語や環境を必要としません。標準のJavaの機能だけで実現されています。そのためライブラリをいくつか設定するだけでDIコンテナにAOPを導入することができます。

 SpringのAOPはDIコンテナで管理されたオブジェクトに対して使用することができます。またAOPによって処理が挿入されたオブジェクトインスタンスは、インターフェイスを介してアクセスされる必要があります。

 DIでは、オブジェクト同士の疎結合を実現するためにインターフェイスベースのプログラミングを強く推奨しています。この考え方とインターフェイスベースのプログラミングのメリットなどは、後ほど連載の中で詳しく説明することにします。

 ここでは、AOPを使用するためには「インターフェイスと具象クラスを分離しなければならない」ということに注意しておいてください。

■サンプルアプリケーションの準備

 SpringAOPを使用するためには、以下のJARファイルにクラスパスを通さなくてはなりません。このJARファイルは、Springフレームワークのアーカイブに含まれています。以下に、AOPサンプルの動作に必要なライブラリを示します。

Jarファイル名 Springアーカイブ中のディレクトリ 説明
aopalliance.jar \lib\aopalliance AOPを使用するために必要なライブラリ
AOPアライアンス(http://aopalliance.sourceforge.net/)とはAOPに関心のあるオープンソースの連合プロジェクトである。SpringはAopAllianceが定義するインターフェイスに準拠している
jakarta-oro.jar \lib\oro Jakartaが提供する正規表現を使用するためのライブラリ

■サンプルアプリケーションの目的

 今回のサンプルでは、「HelloWorld」という文字列を標準出力に書き出すだけのクラスに対してアスペクトとなる処理を挿入し、メソッドの実行前後で別の文字列を出力します。AOPを使うことで既存ロジックにまったく影響を与えずに処理を挿入できることを確認します。

 
図1 SpringフレームワークのAOP

 図1は、サンプルで作成するオブジェクトの関連を表したものです。SpringAOPによって「Beanインターフェイスオブジェクト」を取得すると、インターセプタークラスで定義した処理を挿入した具象オブジェクトが取得できます。

■サンプルアプリケーションの作成

 今回のAOPサンプルで作成するソースを以下に示します。

クラス名 役割 目的
SpringTest サンプル起動クライアント DIコンテナを呼び出して、IHelloWorldBeanオブジェクトを生成
IHelloWorldBean のhelloworld()メソッドを実行します
IHelloWorldBean Beanインターフェイス helloworld()メソッドを持つインターフェイス
HelloWorldBeanImpl Bean実装 IHelloWorldBeanを実装した具象クラス。helloworld()メソッドで標準出力に「Helloworld」と出力します
MyMethodIntercepter インターセプター 標準出力に対して、「メソッド実行前」と「メソッド実行後」を表示します
applicationContext.xml DI設定ファイル DIコンテナの設定を行います。IHelloWorldBeanオブジェクトにMyMethodIntercepterの処理を挿入する処理はこのファイルで指定されます
RegexpMethodPointcutAdvisor アドバイザー Springフレームワークで定義済みのアドバイザー正規表現を使用したポイントカットの指定が可能です


1/3

 INDEX

第3回 Spring Frameworkで理解するDI
Page1
サンプルアプリケーションでAOPを理解する
  Page2
サンプルアプリケーションの実行
  Page3
DIコンテナでライフサイクル管理

Spring Frameworkで理解するDI バックナンバー


Java Solution全記事一覧

TechTargetジャパン

Java Solution フォーラム 新着記事

@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

RSSフィード

キャリアアップ

- PR -
@IT Sepcial

イベントカレンダー

PickUpイベント

- PR -
もっと見る
- PR -

お勧め求人情報

ホワイトペーパーTechTargetジャパン

@IT Sepcial
ソリューションFLASH