看springmvc 方法入参解析器是如何获取的
// mvc原始request入参 方法参数解析
public class ServletWebArgumentResolverAdapter extends AbstractWebArgumentResolverAdapter {
@Override
protected NativeWebRequest getWebRequest() {
// 核心,当前请求线程ThreadLocal
RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes();
if (requestAttributes instanceof ServletRequestAttributes) {
ServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes) requestAttributes;
// 获取对应的request response session等
return new ServletWebRequest(servletRequestAttributes.getRequest());
}
return null;
}
}
关键类:RequestContextHolder
构造当前请求线程的RequestAttributes, 参考:
org.springframework.web.servlet.FrameworkServlet#processRequest
org.springframework.web.servlet.FrameworkServlet#initContextHolders
然后熟悉的doDispatch。