TOP比較データ> Before Advice
徹底比較!!DIxAOPコンテナ
DIxAOPコンテナ「Seasar2とSpring」

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

   Before AdviceはJoinpointの前に処理を追加します。

   Before Adviceを作成するには、インターフェースorg.springframework.aop.MethodBeforeAdvice(リスト3)を実装して処理を記述する必要があります。
リスト3:MethodBeforeAdvice
public interface MethodBeforeAdvice extends BeforeAdvice {
     void before(Method m, Object[] args, Object target) throws Throwable;
}

   リスト4はBefore Adviceの実装例です。

リスト4:BeforeAdviceの実装例
public class TraceBeforeAdvice implements MethodBeforeAdvice {
     public void before(Method method, Object[] args, Object target) throws Throwable {
          System.out.println("前処理");
     }
}
Throw Advice

   Throw AdviceはJoinpointで発生した例外に対する例外処理を追加したいときに利用します。

   Throw Adviceを作成するには、インターフェースorg.springframework.aop.ThrowsAdviceを実装して例外処理を記述します。

   インターフェースThrowsAdviceには、実装すべきメソッドは何も定義されていませんが、ThrowsAdviceを実装するクラスには、リスト5に示すafterThrowingメソッドを記述する必要があります。

リスト5:メソッドafterThrowingの定義
afterThrowing(Throwable subclass)                       
afterThrowing(java.lang.reflect.Method,
     Object[] args, Object target, Throwable subclass)  

   SpringのAOPは、記述されたafterThrowingメソッドのパラメータに定義された例外の型を参照して、Joinpointで発生した例外を振り分けてくれます。

   例えば、ApplicationExceptionを捕捉して処理を追加したい場合は、リスト5の(1)のメソッドを利用して、リスト6の(1)のように実装します。

リスト6:ThrowsAdviceの例

(画像をクリックすると別ウィンドウに拡大表示します)

   例外が発生したメソッドやその引数、例外が発生したクラスの情報を受け取りたい場合は、リスト5の(2)のメソッドを利用します。例えば、キー重複エラーを示すDataIntegrityViolationExceptionを捕捉するにはリスト6の(2)のように実装します。

   SpringもSeasar2と同様に継承関係にある例外を指定したメソッドが同じクラス内に定義されている場合でも、発生した例外から基底となるクラスにさかのぼって振り分けを行います。そのため、try-catchで例外を判定する場合のようにメソッドの順序を気にする必要がありません。


After Returning Advice

   After Returning Adviceは、Joinpointが正常終了した後に処理を追加したい場合に利用します。

   よってJoinpointで例外が発生した場合、After Returing Adviceは呼び出されない点に注意してください。

   After Returing Adviceを作成するには、インターフェースorg.springframework.aop.AfterReturningAdvice(リスト7)を実装して処理を記述します。

リスト7:インターフェースAfterReturningAdvice
public interface AfterReturningAdvice extends Advice {
          void afterReturning(Object returnValue, Method m, Object[] args, Object target) throws Throwable;
}

   リスト8にインターフェースAfterReturningAdviceの実装例を示します。

リスト8:インターフェースAfterReturningAdviceの実装例
public class ObserverAfterReturningAdvice implements AfterReturningAdvice{
     public void afterReturning(Object returnValue, Method method, Object[] args, Object target) throws Throwable {
          System.out.println("後処理");
     }
}
Advisor

   SpringでAOPを利用するには上記に示したAdviceを継承もしくは実装したクラスを開発者が作成し、Bean定義ファイルにPointcutを作成するための条件を記述しAdviceと関連付けをする必要があります。

   Advisorは、Springが提供するクラスでAdviceとPointcutをまとめるためのものです。

   Advisorは開発者が実装すべきものではなく、Springが提供するAdvisorをBean定義ファイルに記述して利用するものです。

   SpringではPointcutはAdvisorに内包した形で提供されていますので、Bean定義ファイルにAdvisorを設定する時にはPointcutを作成するための条件だけを記述します(リスト9)。

リスト9:Advisorの設定
<bean id="myAdvisor" class="org.springframework.aop.support.RegexpMethodPointcutAdvisor">
     <property name="advice" ref="AdviceのBean id"/>
     <property name="pattern" value="正規表現などで記述された条件" />
</bean>

   表3は、Springから提供されるAdvisorの種類です。Advisorは利用するPointcutの種類に応じて選択し、Bean定義ファイルに記述します。

表3:Advisorの種類
表3:Advisorの種類
(画像をクリックすると別ウィンドウに拡大表示します)

前のページ  1  2   3  4  次のページ


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


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


INDEX
第7回:SpringによるAOPの導入
  Seasar2のAOPについて
Before Advice
  EmployeeManagerImplへのAOP適用
  EmployeeDaoImplへのAOP適用