上一篇源码中我们分析到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);
}
}