springmvc中一次请求再次深入学习

来源:互联网 发布:js获取post过来的值 编辑:程序博客网 时间:2024/04/29 14:08

上一篇源码中我们分析到ServletInvocableHandleMethod

public final void invokeAndHandle(
NativeWebRequest request, ModelAndViewContainer mavContainer,
Object... providedArgs) throws Exception {

Object returnValue = invokeForRequest(request, mavContainer, providedArgs);
setResponseStatus((ServletWebRequest) request);
if (returnValue == null) {
if (isRequestNotModified(request) || hasResponseStatus() || mavContainer.isRequestHandled()) {
mavContainer.setRequestHandled(true);
return;
}
}
mavContainer.setRequestHandled(false);
try {

              //这里采用结果返回器进行解析
returnValueHandlers.handleReturnValue(returnValue, getReturnType(), mavContainer, request);
} catch (Exception ex) {

throw ex;
}
}


再分析它了invokeForRequest方法:

public final Object invokeForRequest(NativeWebRequest request,
 ModelAndViewContainer mavContainer,
 Object... providedArgs) throws Exception {

          //这里是为了获取要调用controller方法中参数它包括get请求post请求中及方法中的参数
Object[] args = getMethodArgumentValues(request, mavContainer, providedArgs);
Object returnValue = invoke(args);
return returnValue;
}


再进入到它的invoke方法中:

private Object invoke(Object... args) throws Exception {
ReflectionUtils.makeAccessible(this.getBridgedMethod());//这里就是让私用方法可以使用
try {
return getBridgedMethod().invoke(getBean(), args);//这里的getBridgedMethod()方法返回的就是Method对象
}
catch (Exception e) {
throw new Exception(msg, e);
}
}

原创粉丝点击