|
||||||||||||
| 1 2 3 4 次のページ | ||||||||||||
| Seasar2のAOPについて | ||||||||||||
|
前回の第5回では、AOPの説明を行いました。今回は連載の「第3回:Seasar2の導入によるDIの実現」で作成した従業員管理WebアプリケーションにSeasar2のAOPを利用したトレースログの出力処理と例外処理の追加を行います。 今回AOPを使用して追加するトレースログの出力処理と例外処理は次のようになります。
表1:例外処理
それでは、従業員管理Webアプリケーションにトレースログの出力処理と例外処理を追加する前にSeasar2のAOPについて解説しましょう。AOPの用語については連載の「第5回:AOPとは何か」を参考にしてください。 |
||||||||||||
| Seasar2のAOPのAdvice | ||||||||||||
|
Seasar2のAOPでは、次に示す3つのタイプのAdviceを使用します。
表2:Adviceのタイプ なお、Seasar2のAOPの制約として表3に示す条件の場合には適用できませんので、注意してください。
表3:Seasar2のAOPの制約
それではそれぞれのAdviceについて解説しましょう。 |
||||||||||||
| Around Advice、Before Advice、After Advice、After Returning Advice | ||||||||||||
|
Around AdviceはJoinpointの前後に、処理を追加します。またBefore AdviceはJoinpointの前に、After AdviceはJoinpointの後に、After Returning AdviceはJointpointの正常終了後(例外が発生しない場合)に処理を追加します。 Seasar2ではいずれの場合でも、AOP Allianceが提供するインターフェースorg.aopalliance.intercept.MethodInterceptor(リスト1)を実装するか、org.seasar.framework.aop.interceptors.AbstractInterceptorの抽象クラスを継承して追加したい処理を記述します(リスト2)。 リスト2のinvocationオブジェクトは、AOPの対象として利用元から呼び出された本来のメソッドをあらわすクラスMethodInvocationです。このクラスMethodInvocationのメソッドproceedを呼び出すことで、本来呼び出されたメソッドを処理の中から呼び出すことができます。 proceedの前後に処理を追加したものがAround Adviceとなり、proceedの前、正常終了後、正常終了か否かを問わずに処理を追加したものがそれぞれBefore Advice、After Returning Advice、After Adviceとなります。 SpringのAOPではBefore Advice、After Returning Advice専用のインターフェースを用意していますが、Seasar2のAOPではMethodInterceptorをそのまま使用した方がよいというスタンスを取っているようです。 リスト1:MethodInterceptor |
||||||||||||
public interface MethodInterceptor extends Interceptor {
|
||||||||||||
|
リスト2:Around Adviceでの実装例 |
||||||||||||
⁄⁄Adviceの定義(Joinpointで実行される振る舞い)
|
||||||||||||
|
|
||||||||||||
|
1 2 3 4 次のページ |
||||||||||||
|
|
||||||||||||
|
|
||||||||||||
|
||||||||||||
|
|
||||||||||||
|
||||||||||||


