天下

记录修行的印记

spring源码分析(2)AnnotationMethodHandlerAdapter

public class AnnotationMethodHandlerAdapter extends WebContentGenerator
        
implements HandlerAdapter, Ordered, BeanFactoryAware {
    
//

    
public ModelAndView handle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        
return invokeHandlerMethod(request, response, handler);
    }

    
protected ModelAndView invokeHandlerMethod(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        ServletHandlerMethodResolver methodResolver 
= getMethodResolver(handler);
        Method handlerMethod 
= methodResolver.resolveHandlerMethod(request);
        ServletHandlerMethodInvoker methodInvoker 
= new ServletHandlerMethodInvoker(methodResolver);
        ServletWebRequest webRequest 
= new ServletWebRequest(request, response);
        ExtendedModelMap implicitModel 
= new BindingAwareModelMap();

        Object result 
= methodInvoker.invokeHandlerMethod(handlerMethod, handler, webRequest, implicitModel);
        ModelAndView mav 
=
                methodInvoker.getModelAndView(handlerMethod, handler.getClass(), result, implicitModel, webRequest);
        methodInvoker.updateModelAttributes(handler, (mav 
!= null ? mav.getModel() : null), implicitModel, webRequest);
        
return mav;
    }

    
public ModelAndView getModelAndView(Method handlerMethod, Class<?> handlerType, Object returnValue,
            ExtendedModelMap implicitModel, ServletWebRequest webRequest) 
throws Exception {}
}


其他
public final class Method extends Executable {
    
public Object invoke(Object obj, Object args)
    
throws IllegalAccessException, IllegalArgumentException,InvocationTargetException
    {
        
if (!override) {
            
if (!Reflection.quickCheckMemberAccess(clazz, modifiers)) {
                Class
<?> caller = Reflection.getCallerClass();
                checkAccess(caller, clazz, obj, modifiers);
            }
        }
        MethodAccessor ma 
= methodAccessor;             // read volatile
        if (ma == null) {
            ma 
= acquireMethodAccessor();
        }
        
return ma.invoke(obj, args);
    }
}
public class ModelMap extends LinkedHashMap<String, Object> {}

public abstract class AbstractView extends WebApplicationObjectSupport implements View, BeanNameAware {
    
/**
     * Prepares the view given the specified model, merging it with static
     * attributes and a RequestContext attribute, if necessary.
     * Delegates to renderMergedOutputModel for the actual rendering.
     * 
@see #renderMergedOutputModel
     
*/
    @Override
    
public void render(Map<String, ?> model, HttpServletRequest request, HttpServletResponse response) throws Exception {
        
if (logger.isTraceEnabled()) {
            logger.trace(
"Rendering view with name '" + this.beanName + "' with model " + model +
                
" and static attributes " + this.staticAttributes);
        }

        Map
<String, Object> mergedModel = createMergedOutputModel(model, request, response);
        prepareResponse(request, response);
        renderMergedOutputModel(mergedModel, getRequestToExpose(request), response);
    }
}
代码:

posted on 2018-04-11 16:40 天下 阅读(30) 评论(0)  编辑 收藏 引用 所属分类: Java


只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


<2012年7月>
24252627282930
1234567
891011121314
15161718192021
22232425262728
2930311234

导航

统计

常用链接

留言簿(3)

随笔分类(369)

随笔档案(320)

链接

最新随笔

搜索

最新评论