public abstract static class Interceptor.Impl<TData,TResult,T extends java.lang.annotation.Annotation> extends java.lang.Object implements HandlerWrapper<TData,TResult>
Interceptor
の処理内容を実装するクラスの抽象基底クラスとなるリクエストハンドラ。
各インターセプションが付与されたときに行われるインターセプト処理の内容は、
このクラスを継承して作成する。
各Interceptor
の値に指定されるクラスは、このクラスのサブクラスであり、
インターセプトが行われると、そのサブクラスが実装するHandler.handle(Object, ExecutionContext)
に処理が委譲される。
この際、ラップされる前のリクエストハンドラをgetOriginalHandler()
で取得できるので、
各インターセプタ固有の処理を以下の例のように実装することができる。
public HttpResponse handle(HttpRequest req, ExecutionContext ctx) { try { doBeforeAdvice(); // インターセプタによる前処理 return getOriginalHandler().handle(req, ctx); // 本処理 } catch(RuntimeException e) { doErrorHandling(); // インターセプタによる例外ハンドリング throw e; } finally { doAfterAdvice(); // インターセプタによる終端処理 } }
Constructor and Description |
---|
Impl() |
Modifier and Type | Method and Description |
---|---|
java.util.List<java.lang.Object> |
getDelegates(TData data,
ExecutionContext context)
このラッパーが処理を移譲するオブジェクトのリストを返す。
対象となるオブジェクトが存在しない場合は空の配列を返す。
|
T |
getInterceptor()
処理対象の
Interceptor を取得する。 |
Handler<TData,TResult> |
getOriginalHandler()
インターセプト対象のリクエストハンドラを取得する。
|
void |
setInterceptor(java.lang.annotation.Annotation annotation)
処理対象の
Interceptor を設定する。 |
void |
setOriginalHandler(Handler<TData,TResult> originalHandler)
インターセプト対象のリクエストハンドラを設定する。
|
@Published(tag="architect") public Impl()
public void setInterceptor(java.lang.annotation.Annotation annotation)
Interceptor
を設定する。annotation
- このクラスが実装するInterceptor
@Published(tag="architect") public T getInterceptor()
Interceptor
を取得する。Interceptor
を取得する。@Published(tag="architect") public Handler<TData,TResult> getOriginalHandler()
public void setOriginalHandler(Handler<TData,TResult> originalHandler)
originalHandler
- インターセプト対象のリクエストハンドラpublic java.util.List<java.lang.Object> getDelegates(TData data, ExecutionContext context)
getDelegates
in interface HandlerWrapper<TData,TResult>
data
- ハンドラに対する入力データcontext
- 実行コンテキスト