请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

HandlerInterceptorAdapter中afterConcurrentHandlingStarted方法的疑惑

一般我看设置拦截器,都是继承HandlerInterceptor类,而老师您却采用到的是继承HandlerInterceptorAdapter,我看了下源码发现HandlerInterceptorAdapter是实现了AsyncHandlerInterceptor接口,而这接口也是继承了HandlerInterceptor类,就是相比于HandlerInterceptor多了一个afterConcurrentHandlingStarted方法,我大体看了下英文注释,貌似主要用于异步请求处理的场景。该方法注释如下:

<p>When a handler starts an asynchronous request, the {@link DispatcherServlet}
* exits without invoking {@code postHandle} and {@code afterCompletion} as it
* normally does for a synchronous request, since the result of request handling
* (e.g. ModelAndView) is likely not yet ready and will be produced concurrently
* from another thread. In such scenarios, {@link #afterConcurrentHandlingStarted}
* is invoked instead, allowing implementations to perform tasks such as cleaning
* up thread-bound attributes before releasing the thread to the Servlet container.

这段话,自己翻译后,还是感觉理解得不透彻,比如“请求处理结果(例如ModelAndView)可能还没有准备好,且将同从另一个线程里产生,在这样的情况下使用afterConcurrentHandlingStarted方法”就总感觉自己翻译的特别扭也理解不顺。特问老师两个问题:

  1.  afterConcurrentHandlingStarted这方法的使用场景

  2. HandlerInterceptorAdapter相比于HandlerInterceptor的优势是不是就在于上述这个方法。

正在回答

1回答

你好,如果实现HandlerInterceptor接口的话,三个方法必须实现,不管你需不需要,而HandlerInterceptorAdapter允许我们只实现需要的回调方法

当Controller中有异步请求方法的时候会触发该方法, 可以认为, afterConcurrentHandlingStarted是返回异步结果时调用(异步结果里不需要有数据)

0 回复 有任何疑惑可以回复我~
  • 提问者 Echo鑫 #1
    理解了,谢谢老师!!!!
    回复 有任何疑惑可以回复我~ 2017-12-10 20:01:01
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信