spring-mvc的controller的方法如下:
@RequestMapping("call")
@ResponseBody
public String test() {
longTimeBiz.call();
return "test success";
}
目前希望接入servlet3.0的异步化功能,controller代码需修改为:
@RequestMapping("async")
@ResponseBody
public Callable<String> callable() {
return new Callable<String>() {
@Override
public String call() throws Exception {
log.info("enter callable");
longTimeBiz.call();
return "test success";
}
};
}
对比同步和异步调用,主要区别有:
- 异步调用返回值类型为Callable。
- 同步调用的方法体被包在Callable的call方法中。
在使用异步化过程中,需要改造所有老接口,修改返回值和方法体。
请问,是否可以通过spring注解的方式,统一修改返回值和方法体,将同步调用的代码修改成异步调用?
你看看这样的思路ok不。
配置一个
HandlerInterceptorAdapter
的实现,在preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
方法中处理,比如包成一个AsyncTask,最后return false;
。这样做会接手不少mvc的工作,可以尝试下。