Package nablarch.fw

Class Interceptor.Factory

java.lang.Object
nablarch.fw.Interceptor.Factory
Enclosing class:
Interceptor

public static final class Interceptor.Factory extends Object
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 Details

    • wrap

      public static <D, R> Handler<D,R> wrap(Handler<D,R> handler)
      Interceptorアノテーションによるリクエストハンドラの ラッパーを作成する。

      与えられたリクエストハンドラのHandler.handle(Object, ExecutionContext) メソッド上に付与された Interceptorアノテーションを取得し、 その内容に準じた処理をリクエストハンドラに追加したラッパーで作成する。

      Type Parameters:
      D - ハンドラの入力データ型
      R - ハンドラの処理結果データ型
      Parameters:
      handler - ラップされるハンドラ
      Returns:
      Interceptorの処理を追加したリクエストハンドラ
    • wrap

      public static <D, R> Handler<D,R> wrap(Handler<D,R> handler, Annotation[] annotations)
      与えられたInterceptorアノテーションによって リクエストハンドラをラップする。

      ただし、リクエストハンドラのHandler.handle(Object, ExecutionContext) メソッドに付与されたアノテーションについては評価しない。

      Type Parameters:
      D - ハンドラの入力データ型
      R - ハンドラの処理結果データ型
      Parameters:
      handler - ハンドラ
      annotations - Interceptorアノテーション
      Returns:
      Interceptorでラップされたリクエストハンドラ
    • getInterceptorOf

      public static Interceptor getInterceptorOf(Annotation annotation)
      与えられたアノテーションに付与されている Interceptorメタアノテーションを返す。
      Parameters:
      annotation - メタアノテーション
      Returns:
      付与されているInterceptorアノテーション。 Interceptorが付与されていない場合はnull。