|
||||||||||||
| 前のページ 1 2 3 4 次のページ | ||||||||||||
| Throw Advice | ||||||||||||
|
Throw AdviceはJoinpointで発生した例外に対する例外処理を追加したいときに利用します。 Throw Adviceを作成するには、クラスorg.seasar.framework.aop.interseptors.ThrowsInterceptorを継承したクラスの実装として例外処理を記述します。ThrowsInterceptorを継承したクラスには、メソッド"handleThrowable(Throwable, MethodInvocation)"を実装します。引数のThrowableにはThrowableのサブクラスを指定することができます。 例えばメソッド"handleThrowable(NullPointerException, MethodInvocation)"を定義すると、JoinpointでNullPointerExceptionもしくはNullPointerExceptionのサブクラスの例外が発生した場合に呼び出されます。またメソッド"handleThrowable(Throwable, MethodInvocation)"は、ThrowsInterceptorを継承したクラスの中に複数個定義することができます。 Seasar2のAOPは、記述されたメソッドのパラメータに定義された例外の型を参照してJoinpointで発生した例外を適切に振り分けてくれます。継承関係にある例外を指定したメソッドが同じクラス内に定義されている場合でも、発生した例外から基底となるクラスにさかのぼって振り分けを行います。そのため、try-catchで例外を判定する場合のようにメソッドの順序を気にする必要がありません。 リスト3:メソッドhandleThrowableの定義 |
||||||||||||
public void handleThrowable(Throwable t, MethodInvocation invocation)
|
||||||||||||
|
リスト4:Throw Adviceの実装例 |
||||||||||||
public class HandleThrowableInterceptor extends ThrowsInterceptor {
|
||||||||||||
| Seasar2で提供されるその他のAdvice | ||||||||||||
|
Seasar2のAOPでは、よく使用される機能をあらかじめ実装したInterceptorが提供されています。ここでは、TraceInterceptor、DelegateInterceptor、InterceptorChainの3つを取り上げます。 |
||||||||||||
| TraceInterceptor | ||||||||||||
|
org.seasar.framework.aop.interceptors.TraceInterceptorは、トレース処理を扱うためのAdviceです。簡易に処理内容を知りたい時に便利です(リスト5)。 |
||||||||||||
|
リスト5:TraceInterceptorの例 |
||||||||||||
<component name="traceInterceptor"
|
||||||||||||
|
下記はトレースの出力例です。 |
||||||||||||
DEBUG 2005-12-31 14:23:58,380 [main] BEGIN aopsample.SampleImpl#method()
|
||||||||||||
| DelegateInterceptor | ||||||||||||
|
DelegateInterceptorは、メソッドの呼び出しを別のクラスに委譲するためのAdviceです。org.seasar.framework.aop.interceptors.DelegateInterceptorを利用して、targetプロパティに委譲したい相手を指定します。targetプロパティの指定はメソッド"setTarget"で設定します。 リスト6の定義例では、抽象クラスAbstractSampleに対してDelegateInterceptorのメソッド"setTarget"を使用して実装クラスSampleImplを設定しています。使用例の呼び出しを行いmethodが処理を行います。 リスト6:DelegateInterceptorの定義例 |
||||||||||||
⁄⁄ diconファイルの定義例
|
||||||||||||
| InterceptorChain | ||||||||||||
|
InterceptorChainは、複数のAdviceをグループ化し、再利用しやすくするためのAdviceです。org.seasar.framework.aop.interseptors.InterceptorChainを利用して、複数のAdviceを指定して使用します(リスト7)。 処理の実行順序は先に登録したAdviceが先に実行されます。Around Adviceの実装をA、Bの順に登録した場合、「AのBefore処理 → BのBefore処理 → AOPを適用したメソッドの呼び出し → BのAfter処理 → AのAfter処理」という順番になります。 リスト7:InterceptorChainの例 |
||||||||||||
<component name="traceInterceptor" class="TraceInterceptor"/>
|
||||||||||||
|
前のページ 1 2 3 4 次のページ |
||||||||||||
|
|
||||||||||||
|
|
||||||||||||
|
||||||||||||
|
|
||||||||||||
|
||||||||||||


