springmvc RequestMappingHandlerMapping初始化详解

springmvc中配置这个标签默认注册三个bean:RequestMappingHandlerMapping,RequestMappingHandlerAdapterDefaultHandlerExceptionResolver

RequestMappingHandlerMapping

我们看它实现了InitializingBean 接口,所以在getBean()实例化它时会执行afterPropertiesSet()方法,来看该方法干了什么?

方法中实例化了一个BuilderConfiguration对象,并为该对象设置了一些路径抓取器,路径方法匹配器等。最后还需要调用父类的方法

父类只是调用了initHandlerMethods()方法,该方法很关键是将请求路径和方法匹配的

// 获得所有的beanName

// 遍历所有的beanName并获得type类型

// 判断类是否被@Controller或是@RequestMapping注释了,是执行detectHandlerMethods(beanName)方法

// 首先获得类型class,根据类的class获得一个Map,这个map的key是Method,value是RequestMappingInfo,后文详解#1

// 遍历map,获得Method和RequestMappingInfo,注册他们。后文详解#2

书接前文#1

selectMethods()方法中,根据类的class获得所有的方法,遍历方法执行doWith(Method method)方法

获得方法和RequestMappingInfo,将他们存到Map中返回,RequestMappingInfo是怎么获得的呢?我们马上来看

执行的是detectHandlerMethods()方法中的getMappingForMethod(method, userType)方法,该方法是一个抽象方法。RequestMappingHandlerMapping执行方法

// 创建方法的RequestMappingInfo,后文详解#1-1

// 创建类的RequestMappingInfo,该步骤和上一步如出一辙

// 将前两者结合,后文详解#1-2

书接前文#1-1

// 获得方法上的@RequestMapping注解的信息,根据注解创建RequestMappingInfo

这里使用了建造者模式创建,我们来看build()方法干了什么?

方法中关键的是PatternsRequestCondition对象,该对象的patterns属性保存了方法注解的路径值如 /app,创建了RequestMappingInfo返回

书接前文#1-2

方法中分别使用结合方法,然后重新创建一个返回,我们主要来看一下PatternsRequestCondition的方法

使用了AntPathMatcher对象结合类注解路径和方法注解路径,如果没有通配符则简单拼接如 /person , /list --> /person/list

重新创建一个返回

书接前文#2

AbstractHandlerMethodMapping中使用MappingRegistry属性对象注册

// 创建HandlerMethod对象,后文详解#2-1

// 将映射和对应的方法存起来

// 获得映射路径,将映射路径和映射对象存起来。后文详解#2-2

// 获得RequestMappingInfo的name,将name和method存起来

// 将映射对象和映射注册对象存起来

书接前文#2-1

HandlerMethod中,有beanName,beanFactory,method,methodParameter

书接前文#2-2

获得RequestMappingInfo中的PatternsRequestCondition中的patterns属性值

 至此RequestMappingHandlerMapping的初始化完成了

时间: 2024-09-29 21:04:02

springmvc RequestMappingHandlerMapping初始化详解的相关文章

springmvc RequestMappingHandlerAdapter初始化详解

我们来看一下RequestMappingHandlerAdapter初始化时做了什么? initControllerAdviceCache()方法是处理注解@ControllerAdvice的,此时我们暂且不关注 这个就比较关键了,注解了很多参数解析器,后文详解#1 返回用于@initbinder方法的参数解析器列表,包括内置的和自定义的解析器.注册步骤和上一步如出一辙不再详述 注册了很多返回值处理器,注册步骤和上一步如出一辙不再详述 书接前文#1 注册了基于注解的参数解析器包括注解@PathV

SpringMVC拦截器详解[附带源码分析]

目录 前言 重要接口及类介绍 源码分析 拦截器的配置 编写自定义的拦截器 总结 前言 SpringMVC是目前主流的Web MVC框架之一. 如果有同学对它不熟悉,那么请参考它的入门blog:http://www.cnblogs.com/fangjian0423/p/springMVC-introduction.html 拦截器是每个Web框架必备的功能,也是个老生常谈的主题了. 本文将分析SpringMVC的拦截器功能是如何设计的,让读者了解该功能设计的原理. 重要接口及类介绍 1. Hand

SpringMVC视图机制详解[附带源码分析]

目录 前言 重要接口和类介绍 源码分析 编码自定义的ViewResolver 总结 参考资料 前言 SpringMVC是目前主流的Web MVC框架之一. 如果有同学对它不熟悉,那么请参考它的入门blog:http://www.cnblogs.com/fangjian0423/p/springMVC-introduction.html 本文将分析SpringMVC的视图这部分内容,让读者了解SpringMVC视图的设计原理. 重要接口和类介绍 1. View接口 视图基础接口,它的各种实现类是无

Dubbo+SpringMVC工程创建详解(附工程文件)

Dubbo+SpringMVC工程创建详解(附工程文件) Dubbo出现的目的是为了应对现在高并发,高数据量请求的问题.目前的垂直应用架构已经无法满足现在大数据的冲击,SOA就应运而生,而Dubbo在国内使用的还是比较多,稳定性也比较不错. 架构 节点角色说明: Provider: 暴露服务的服务提供方. Consumer: 调用远程服务的服务消费方. Registry: 服务注册与发现的注册中心. Monitor: 统计服务的调用次调和调用时间的监控中心. Container: 服务运行容器.

SpringMVC深度探险(四) —— SpringMVC核心配置文件详解

本文是专栏文章(SpringMVC深度探险)系列的文章之一,博客地址为:http://downpour.iteye.com/blog/1389285. 在上一篇文章中,我们从DispatcherServlet谈起,最终为读者详细分析了SpringMVC的初始化主线的全部过程.整个初始化主线的研究,其实始终围绕着DispatcherServlet.WebApplicationContext和组件这三大元素之间的关系展开. 在文章写完之后,也陆续收到了一些反馈,其中比较集中的问题,是有关WebApp

springMVC的注解详解

springmvc常用注解标签详解 1.@Controller 在SpringMVC 中,控制器Controller 负责处理由DispatcherServlet 分发的请求,它把用户请求的数据经过业务处理层处理之后封装成一个Model ,然后再把该Model 返回给对应的View 进行展示.在SpringMVC 中提供了一个非常简便的定义Controller 的方法,你无需继承特定的类或实现特定的接口,只需使用@Controller 标记一个类是Controller ,然后使用@Request

SpringMvc测试框架详解----服务端测试

随着RESTful Web Service的流行,测试对外的Service是否满足期望也变的必要的.从Spring 3.2开始Spring了Spring Web测试框架,如果版本低于3.2,请使用spring-test-mvc项目(合并到spring3.2中了). Spring MVC测试框架提供了对服务器端和客户端(基于RestTemplate的客户端)提供了支持. 对于服务器端:在Spring 3.2之前,我们测试时一般都是直接new控制器,注入依赖,然后判断返回值.但是我们无法连同Spri

[转]SpringMVC拦截器详解[附带源码分析]

目录 前言 重要接口及类介绍 源码分析 拦截器的配置 编写自定义的拦截器 总结 前言 SpringMVC是目前主流的Web MVC框架之一. 如果有同学对它不熟悉,那么请参考它的入门blog:http://www.cnblogs.com/fangjian0423/p/springMVC-introduction.html 拦截器是每个Web框架必备的功能,也是个老生常谈的主题了. 本文将分析SpringMVC的拦截器功能是如何设计的,让读者了解该功能设计的原理. 重要接口及类介绍 1. Hand

SpringMVC拦截器详解

拦截器是每个Web框架必备的功能,也是个老生常谈的主题了. 本文将分析SpringMVC的拦截器功能是如何设计的,让读者了解该功能设计的原理. 重要接口及类介绍 1. HandlerExecutionChain类 由HandlerMethod和Interceptor集合组成的类,会被HandlerMapping接口的getHandler方法获取. 2. HandlerInterceptor接口 SpringMVC拦截器基础接口. 3. AbstractHandlerMapping Handler