Package nablarch.fw
Class Interceptor.Factory
java.lang.Object
nablarch.fw.Interceptor.Factory
- Enclosing class:
- Interceptor
InterceptorアノテーションによるHandler.handle(Object, ExecutionContext)
へのインターセプトを実現するスタティックメソッドを保持するクラス。
次のコードにより、handler.handle() メソッド上に付与されている
Interceptorアノテーションを収集し、各インターセプタに対応した
リクエストハンドラでラップされたハンドラ(wrapped)が生成される。
Handler wrapped = Interceptor.Factory.wrap(handler);
wrapped.handle() を実行すると、各インターセプタのhandle()メソッドが順次実行され、
最後に元のリクエストハンドラのhandle()メソッドが呼ばれる。
インターセプタの実行順は、SystemRepositoryにキー値:interceptorsOrderで定義する。
以下のように定義した場合、インターセプタはInterceptor2、Interceptor1の順で実行される。
<list name="interceptorsOrder">
<value>test.Interceptor2</value>
<value>test.Interceptor1</value>
</list>
SystemRepositoryに実行順が定義されている場合に、実行順に定義されていないインターセプタを
使用すると、実行時例外(IllegalArgumentException)を送出し処理を終了する。
SystemRepositoryに実行順が定義されていない場合は、
Method.getDeclaredAnnotations()で返されるリストの逆順で実行される。
※Method.getDeclaredAnnotations()で返される順序は、規定されていないため実行環境(jvmのバージョンなど)により結果が変わる可能性がある。
このため、実行順を保証する必要がある場合は、必ずSystemRepositoryに実行順の定義を行うこと。-
Method Summary
Modifier and TypeMethodDescriptionstatic InterceptorgetInterceptorOf(Annotation annotation) 与えられたアノテーションに付与されているInterceptorメタアノテーションを返す。static <D,R> Handler<D, R> Interceptorアノテーションによるリクエストハンドラの ラッパーを作成する。static <D,R> Handler<D, R> wrap(Handler<D, R> handler, Annotation[] annotations) 与えられたInterceptorアノテーションによって リクエストハンドラをラップする。
-
Method Details
-
wrap
Interceptorアノテーションによるリクエストハンドラの ラッパーを作成する。 与えられたリクエストハンドラのHandler.handle(Object, ExecutionContext)メソッド上に付与されたInterceptorアノテーションを取得し、 その内容に準じた処理をリクエストハンドラに追加したラッパーで作成する。- Type Parameters:
D- ハンドラの入力データ型R- ハンドラの処理結果データ型- Parameters:
handler- ラップされるハンドラ- Returns:
Interceptorの処理を追加したリクエストハンドラ
-
wrap
与えられたInterceptorアノテーションによって リクエストハンドラをラップする。 ただし、リクエストハンドラのHandler.handle(Object, ExecutionContext)メソッドに付与されたアノテーションについては評価しない。- Type Parameters:
D- ハンドラの入力データ型R- ハンドラの処理結果データ型- Parameters:
handler- ハンドラannotations-Interceptorアノテーション- Returns:
Interceptorでラップされたリクエストハンドラ
-
getInterceptorOf
与えられたアノテーションに付与されているInterceptorメタアノテーションを返す。- Parameters:
annotation- メタアノテーション- Returns:
- 付与されている
Interceptorアノテーション。Interceptorが付与されていない場合はnull。
-