AbstractHandlerMethodAdapter是HandlerAdapter接口的简单抽象类,实现了接口定义的方法,同时增加了执行顺序Order。
public abstract class AbstractHandlerMethodAdapter extends WebContentGenerator implements HandlerAdapter, Ordered {
private int order = Ordered.LOWEST_PRECEDENCE;
public AbstractHandlerMethodAdapter() {
// no restriction of HTTP methods by default
super(false);
}
@Override
public final boolean supports(Object handler) {
return (handler instanceof HandlerMethod && supportsInternal((HandlerMethod) handler));
}
protected abstract boolean supportsInternal(HandlerMethod handlerMethod);
API
handle
重写HandlerAdapter的handle方法,此实现需要的处理器是一个HandlerMethod
handleInternal
- 使用给定的处理方法来处理请求。
-
// (1)备好处理器所需要的参数
// (2)使用处理器处理请求
// (3)处理返回值,将不同类型的返回值统一处理成ModelAndView
PARAMS:
请求 - 当前的HTTP请求
响应 - 当前HTTP响应
handlerMethod - 处理方法使用。 这个对象必须已经传递到supportsInternal(HandlerMethod)接口,这样肯定没有返回true 。
返回
与视图的名称和所需的模型数据,或ModelAndView对象null如果请求已经被直接处理
抛出:
Exception -在错误的情况
@Override
public final long getLastModified(HttpServletRequest request, Object handler) {
return getLastModifiedInternal(request, (HandlerMethod) handler);
}
//提供order功能
public void setOrder(int order) {
this.order = order;
}
@Override
public int getOrder() {
return this.order;
}
protected abstract long getLastModifiedInternal(HttpServletRequest request, HandlerMethod handlerMethod);
}
handleInternal由唯一子类RequestMappingHandlerAdapter实现。