-
通过HandlerMapping(处理器映射器)去请求url对应的handler(通过getHander()方法)
-
举例匹配路径为/url-->>getPerson();
-
-
获取匹配的HandlerAdapter
-
通过HandlerMapping获取的handler,将4个HandlertAdapter增强for循环遍历得到对应的处理器适配器Adapter(HandlerAdapter一共有四种),通过supports判断是否支持当前Adapter,举例:RequestMappingHandlerAdapter通过判断当前handler是否是HandlerMethod。
-
4种HandlerAdapter:{RequestMappingHandlerAdapter、HandlerFunctionAdapter、HttpRequestHandlerAdapter、SimpleControllerHandlerAdapter}
-
-
通过Adapter调用Handler()方法,执行控制器方法,返回ModelAndView(此处只讲到方法参数自动解析)
-
在源码中创建了一个ModelAndView对象mav,通过调用invokeHandlerMethod,来返回ModelAndView对像
-
进入invokeHandlerMethod会将26个参数解析器和15个返回值处理器放入控制器方法中
-
通过getMethodArgumentValue方法返回的是一个存放参数值的Object [] args 数组,该数组之后存放参数的值
-
在getMethodArgumentValue方法中首先获取了我们所有的参数,放到了一个parameters的数组中
-
遍历循环parameters[ ]得到每一个参数,在通过循环遍历26个参数解析器,查找parameter是否有匹配argumentresolvers(参数解析器),如果匹配到了就放入arguementResovler(缓存)中。
-
匹配的参数解析器已经存放在缓存中,之后就是从缓存中拿到这个参数解析器,然后通过resolverArgument方法得到对应参数的值arg,并且返回存入到Object [] args 数组中
-