Spring AOPサンプルアプリでAOPを理解するSpring Frameworkで理解するDI(3)(1/3 ページ)

» 2005年12月03日 00時00分 公開
[山本大クロノス]

本記事は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 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|2|3 次のページへ

Copyright © ITmedia, Inc. All Rights Reserved.

スポンサーからのお知らせPR

注目のテーマ

Microsoft & Windows最前線2025
AI for エンジニアリング
ローコード/ノーコード セントラル by @IT - ITエンジニアがビジネスの中心で活躍する組織へ
Cloud Native Central by @IT - スケーラブルな能力を組織に
システム開発ノウハウ 【発注ナビ】PR
あなたにおすすめの記事PR

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。