/**
* Copyright (c) 2005-2012 https://github.com/zhangkaitao
*
* Licensed under the Apache License, Version 2.0 (the "License");
*/
package com.sishuok.chapter3.web.interceptor;
import org.springframework.web.context.request.NativeWebRequest;
import org.springframework.web.context.request.async.DeferredResult;
import org.springframework.web.context.request.async.DeferredResultProcessingInterceptorAdapter;
/**
* <p>User: Zhang Kaitao
* <p>Date: 13-7-18 下午9:10
* <p>Version: 1.0
*/
public class MyDeferredResultInterceptor extends DeferredResultProcessingInterceptorAdapter {
@Override
public <T> void beforeConcurrentHandling(final NativeWebRequest request, final DeferredResult<T> deferredResult) throws Exception {
System.out.println("=====在startAsyc开启异步之前执行");
}
@Override
public <T> void preProcess(final NativeWebRequest request, final DeferredResult<T> deferredResult) throws Exception {
//不同于Callable 它与beforeConcurrentHandling在同一个线程执行
System.out.println("在startAsyc开启异步之后执行");
}
@Override
public <T> void postProcess(final NativeWebRequest request, final DeferredResult<T> deferredResult, final Object concurrentResult) throws Exception {
//在 DeferredResult.setResult(Object) 或 DeferredResult#setErrorResult(Object) 调用之后执行
System.out.println("设置了DeferredResult的值之后执行");
}
@Override
public <T> boolean handleTimeout(final NativeWebRequest request, final DeferredResult<T> deferredResult) throws Exception {
System.out.println("异步任务超时了");
deferredResult.setErrorResult("error");//设置出错的结果
return true; //如果return true 那么后续的拦截器的handleTimeout将不执行
}
@Override
public <T> void afterCompletion(final NativeWebRequest request, final DeferredResult<T> deferredResult) throws Exception {
System.out.println("异步任务完成了");
}
}