publicclassWebAsyncTask<V>implementsBeanFactoryAware{// 正常执行的函数(通过WebAsyncTask的构造函数可以传进来)privatefinalCallable<V>callable;// 处理超时时间(ms),可通过构造函数指定,也可以不指定(不会有超时处理)privateLongtimeout;// 执行任务的执行器。可以构造函数设置进来,手动指定。privateAsyncTaskExecutorexecutor;// 若设置了,会根据此名称去IoC容器里找这个Bean(和上面二选一)// 若传了executorName,请务必调用set方法设置beanFactoryprivateStringexecutorName;privateBeanFactorybeanFactory;// 超时的回调privateCallable<V>timeoutCallback;// 发生错误的回调privateCallable<V>errorCallback;// 完成的回调(不管超时还是错误都会执行)privateRunnablecompletionCallback;...// 这是获取执行器的逻辑@NullablepublicAsyncTaskExecutorgetExecutor(){if(this.executor!=null){returnthis.executor;}elseif(this.executorName!=null){Assert.state(this.beanFactory!=null,"BeanFactory is required to look up an executor bean by name");returnthis.beanFactory.getBean(this.executorName,AsyncTaskExecutor.class);}else{returnnull;}}publicvoidonTimeout(Callable<V>callback){this.timeoutCallback=callback;}publicvoidonError(Callable<V>callback){this.errorCallback=callback;}publicvoidonCompletion(Runnablecallback){this.completionCallback=callback;}// 最终执行超时回调、错误回调、完成回调都是通过这个拦截器实现的CallableProcessingInterceptorgetInterceptor(){returnnewCallableProcessingInterceptor(){@Overridepublic<T>ObjecthandleTimeout(NativeWebRequestrequest,Callable<T>task)throwsException{return(timeoutCallback!=null?timeoutCallback.call():CallableProcessingInterceptor.RESULT_NONE);}@Overridepublic<T>ObjecthandleError(NativeWebRequestrequest,Callable<T>task,Throwablet)throwsException{return(errorCallback!=null?errorCallback.call():CallableProcessingInterceptor.RESULT_NONE);}@Overridepublic<T>voidafterCompletion(NativeWebRequestrequest,Callable<T>task)throwsException{if(completionCallback!=null){completionCallback.run();}}};}}