IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    spring源码分析(2)AnnotationMethodHandlerAdapter

    天下发表于 2018-04-11 08:40:00
    love 0
    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);
        }
    }
    代码:


    天下 2018-04-11 16:40 发表评论


沪ICP备19023445号-2号
友情链接