基于springboot2的springmvc执行流程(二)

基于springboot2的springmvc执行流程(二)

上一节中,我们分析了springmvc的大致执行流程,把DispatherServlet里面的整体流程都分析了一遍,doDispatch方法里面有一行代码是整个流程最核心的逻辑,如下图:
在这里插入图片描述
接下来我们进入到RequestMappingHandlerAdapter的handle方法进行源码分析:

首先会进入RequestMappingHandlerAdapter的父类handle方法,handle方法是handlerAdapter的定级接口的方法,所有子类都必须实现这个方法,这就是spring源码的扩展性的体现,这里你可以自己实现一个执行器。

在这里插入图片描述
真正执行handle逻辑的是handleInternal方法,这个方法在模板类中就是个没有实现的方法,是在RequestMappingHandlerAdapter中实现的,所以流程就又跳到了RequestMappingHandlerAdapter中,所以这个流程就是这样绕来绕去。

在这里插入图片描述
那么接下来我们就进入invokeHandlerMethod方法:
在这里插入图片描述
这个方法中没有太多与流程有关的逻辑代码,在
invocableMethod.invokeAndHandle(webRequest, mavContainer)
这行代码之前其实就做了一个事,就是把HandlerMethod对象里面的所有属性都赋值给新创建出来的ServletInvocableHandlerMethod对象,因为handlerMethod对象是一个公共的对象,这个请求拿到了,其他请求还要找它,所以就在本请求级别创建一个可执行的handlerMethod对象。再把argumentResolvers和returnValueHandlers两个属性也一起赋值给ServletInvocableHandlerMethod对象,这两个属性也是组合对象,一个是参数解析器,一个是返回值解析器,是后面分析流程的两个最核心对象。

接下来我们就进入ServletInvocableHandlerMethod对象的invokeAndHandle方法:
在这里插入图片描述
这个方法的主要代码我都写了注释,主要是两步骤:
1、执行请求的controller业务方法得到返回值
2、解析返回值

总结

本节我们分析了handlerAdapter执行的大致逻辑,总结起来就是五点:

1、把找到的handlerMethod对象里面的所有属性都赋值给新创建出来的ServletInvocableHandlerMethod
2、把参数解析器和返回值解析器从handlerAdapter里面的属性赋值给ServletInvocableHandlerMethod
3、执行ServletInvocableHandlerMethod的invokeAndHandle方法
4、执行请求得到返回值
5、解析返回值

下一节,我将分析
Object returnValue = invokeForRequest(webRequest, mavContainer, providedArgs);
这行代码到底都做了哪些工作。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值