
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 バックナンバー
- 第1回 DI:依存性の注入とは何か?
- 第2回 Springフレームワークの設計思想とAOP
- 第3回 Spring AOPサンプルアプリで理解するAOP
- 最終回 なぜDIコンテナを使うのか
| Java Solution全記事一覧 |
TechTargetジャパン
- EclipseでScalaプログラミングを始めるための基礎 (2012/2/10)
概要や5つの特徴を紹介し、開発環境を構築して対話型実行環境「REPL」やEclipse上でHello Worldを実行します - 並列分散処理の常識をHadoopファミリから学ぶ (2012/2/8)
並列分散処理の課題やHadoopの長所/短所、そして短所を補うHadoop関連プロジェクトの構成や概要などを簡単に紹介 - WebLogicサーバ最新版「12c」の気になる4つの特徴 (2012/1/31)
久々にメジャーアップグレードしたJavaアプリケーションサーバについて、製品担当者に軽量インストーラなどの特徴を聞いた - GitHubをもっとソーシャルに使いこなすための7つ道具 (2012/1/23)
ソースコードホスティングのGitHub周辺で便利な新サービスが続々登場しているので、まとめて紹介しよう。特に連動クラウド「fluxflex」が注目だ
|
|
キャリアアップ
スポンサーからのお知らせ
- - PR -
イベントカレンダー
- - PR -

