springmvc 调用流程

org.springframework.web.servlet.DispatcherServlet#doDispatch
    >org.springframework.web.servlet.DispatcherServlet#getHandler获取HandlerExecutionChain执行类(处理程序执行链,由处理程序对象和任何处理程序拦截器组成)
    >org.springframework.web.servlet.DispatcherServlet#getHandlerAdapter获取handlerAdapter(MVC framework SPI, allowing parameterization of the core MVC workflow.)
    >org.springframework.web.servlet.HandlerAdapter#handle执行handle,mvc处理的核心流程,包括request封装,注解解析,参数解析,controller执行,返回值处理
    >org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter#handleInternal
    >org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter#handleInternal
    >org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter#invokeHandleMethod
    >org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod#invokeAndHandle
    >org.springframework.web.method.support.InvocableHandlerMethod#invokeForRequest处理请求
    >org.springframework.web.method.support.InvocableHandlerMethod#getMethodArgumentValues参数处理
    >org.springframework.web.method.support.InvocableHandlerMethod#doInvoke执行真正的controller
    》org.springframework.web.method.support.HandlerMethodReturnValueHandlerComposite#handleReturnValue返回值处理
    
参数处理流程

org.springframework.web.method.support.InvocableHandlerMethod#invokeForRequest

》org.springframework.web.method.support.InvocableHandlerMethod#getMethodArgumentValues查找并组装参数

》org.springframework.web.method.support.InvocableHandlerMethod#resolveProvidedArgument处理参数值

》org.springframework.web.method.support.HandlerMethodArgumentResolverComposite#supportsParameter查找参数处理器中的一个方法,通过组合模式实现,最终实现是循环去调用org.springframework.web.method.support.HandlerMethodArgumentResolver的实现类的supportsParameter方法,找到则跳出循环,直接调用它的resolveArgument方法,HandlerMethodArgumentResolver这个接口的实现类很多,其实简单的说是按照controller里的注解配置决定的,对于不同的注解实现类不一样,比如@PathVariable注解处理类是org.springframework.web.servlet.mvc.method.annotation.PathVariableMapMethodArgumentResolver,@RequestBody注解的实现处理类是org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor,@RequestParam注解的处理器是org.springframework.web.method.annotation.RequestParamMethodArgumentResolver,还有些基础类型的如String,Integer等没有被注解修饰的默认也是org.springframework.web.method.annotation.RequestParamMethodArgumentResolver处理的

返回值处理:

org.springframework.web.method.support.HandlerMethodReturnValueHandlerComposite#handleReturnValue

》org.springframework.web.method.support.HandlerMethodReturnValueHandlerComposite#selectHandler查找返回值处理器

》org.springframework.web.method.support.HandlerMethodReturnValueHandler#handleReturnValue真正处理返回值,处理是根据controller里面配置的返回值的类型去处理的,其实是调用org.springframework.web.method.support.HandlerMethodReturnValueHandler接口的supportsReturnType来确定的,如果返回的是view则处理类是org.springframework.web.servlet.mvc.method.annotation.ModelAndViewResolverMethodReturnValueHandler;

如果controller中配置的是@ResponseBody,则处理类是org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor;

如果返回map则处理类是org.springframework.web.method.annotation.MapMethodProcessor

还有好多各种处理器;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值