TOP比較データ> SpringのAOPについて




徹底比較!!DIxAOPコンテナ
DIxAOPコンテナ「Seasar2とSpring」

第7回:SpringによるAOPの導入
著者:豆蔵  長谷川 裕一、竹端 進   2006/1/18
1   2  3  4  次のページ
SpringのAOPについて

   前回は、Seasar2のAOPを利用したトレースログの出力処理と例外処理の追加の解説を行いました。今回は連載の「第4回:Springの導入によるDIの実現」で作成した従業員管理WebアプリケーションにSpringのAOPを利用したトレースログの出力処理と例外処理を追加していきます。

   今回追加するトレースログの出力処理と例外処理は次のようになります。
  • EmployeeManagerImplにSpringが提供するインタセプターを用いたトレースログの出力処理と、独自実装の例外処理を追加します
  • EmployeeDaoImplにSpringのAutoProxyを利用して独自実装のトレースログを追加します

表1:トレースログの出力処理と例外処理

   それでは、従業員管理Webアプリケーションにトレースログの出力処理と例外処理を追加する前にSpringのAOPについて解説しましょう。AOPの用語については連載の「第5回:AOPとは何か」を参考にしてください。


SpringのAOPのAdvice

   SpringのAOPでは、次に示す4つのタイプのAdviceを提供しています。

Around Advice
Joinpointの前後で実行されるAdvice
Before Advice
Joinpointの前に実行するAdvice
Throw Advice
Joinpointで例外が発生した場合に実行されるAdvice
After Returning Advice
Joinpointが完全に正常終了した後に実行されるAdvice

表2:Adviceのタイプ

   それではそれぞれのAdviceについて解説しましょう。


Around Advice

   Around AdviceはJoinpointの前後に、処理を追加します。

   SpringでAround Adviceを利用するには、AOP Allianceが提供するインターフェースorg.aopalliance.intercept.MethodInterceptor(リスト1)を実装して追加したい処理を記述します(リスト2)。

リスト1:MethodInterceptor
public interface MethodInterceptor extends Interceptor {
Object invoke(MethodInvocation invocation) throws Throwable;
}

リスト2:Around Adviceでの実装例
//Adviceの定義(Joinpointで実行される振る舞い)
private class SpecialInterceptor implements MethodInterceptor {

     public Object invoke(MethodInvocation invocation) throws Throwable {

          //メソッド呼び出し前の処理を記述
          System.out.println("前処理");

          //実際のメソッド呼び出し
          Object result = invocation.proceed();

          //メソッド呼び出し後の処理を記述
          System.out.println("後処理");
          return result;
     }
(以下省略)

   なお、リスト2のinvocationオブジェクトは、本来呼び出されるメソッドをあらわすMethodInvocationクラスです。このクラスMethodInvocationのproceedメソッドを呼び出すことで、本来呼び出されるクラスのメソッドを呼び出すことができるような仕組みになっています。

   前回のSeasar2で解説したようにMethodInterceptorを利用することでBefore AdviceやAfter Adviceなども工夫次第で作成することもできますが、SpringではMethodInterceptorは基本的にAround Adviceを作成するものです。

1   2  3  4  次のページ


株式会社豆蔵 長谷川 裕一
著者プロフィール
株式会社豆蔵  長谷川 裕一
XMLの技術開発やCORBA、EJBを使用したシステム開発などを経て、現在はアジャイル開発プロセスの導入から工学的なソフトウエアプロセスの策定、オープンソースプロダクトに関するコンサルタント、アーキテクトとして常に第一線で活躍。共著として「プログラムの育てかた 現場で使えるリファクタリング(ソフトバンク)」、「Spring入門(技術評論社)」。


株式会社豆蔵 竹端 進
著者プロフィール
株式会社豆蔵  竹端 進
鉄鋼系SIerを経て現職に。現在はオープンソースプロダクトに関するコンサティング、開発支援、教育を行うチームに所属。日々、新たな技術をどのように生かしていくかを考える毎日。現在の注目対象はSeasar2とMaven。


この記事の評価をお聞かせください
ボタンをクリックしますとウインドウが開きます。

INDEX
第7回:SpringによるAOPの導入
Seasar2のAOPについて
  Before Advice
  EmployeeManagerImplへのAOP適用
  EmployeeDaoImplへのAOP適用
DIxAOPコンテナ「Seasar2とSpring」
第1回 時代は今「DIxAOPコンテナ」
第2回 Seasar2とSpringのインストール
第3回 Seasar2の導入によるDIの実現
第4回 Springの導入によるDIの実現
第5回 AOPとは何か
第6回 Seasar2によるAOPの導入
第7回 SpringによるAOPの導入