推广 热搜: page  数据  小红  红书  考试  论文  数据分析  关键词  哪些  搜索 

从源码深入解析:Spring Boot与Spring MVC如何借由@RequestMapping注解精准定位请求路径至目标方法

   日期:2024-12-10     移动:https://sicmodule.kub2b.com/mobile/quote/4958.html

  无论是Spring Boot项目还是Spring MVC项目,请求路径能够准确无误地定位到目标方法,这一功能的实现离不开RequestMappingHandlerMapping的卓越贡献。作为Spring框架中的核心组件,它扮演着至关重要的角色,通过解析@RequestMapping注解,将请求路径与目标方法进行精确匹配缓存,从而确保了当请求到达后可以根据路径信息从缓存中匹配到目标方法。

  RequestMappingHandlerMapping实现了InitializingBean接口,所以再其初始化的时候会调用afterPropertiesSet()方法来进行初始化配置,这一过程会扫描解析项目中的所有符合条件的控制类,然后解析缓存路径和方法之间的关系。其具体流程如下

1:调用afterPropertiesSet()方法进行一些从基础信息的配置,如下图

  2:上面的super.afterPropertiesSet()核心方法最终会调用initHandlerMethods()方法,如下图

  3:processCandidateBean方法主要作用就是将不是控制类的bd进行排除,如下图

  4:detectHandlerMethods方法就是获取当前控制类的所有方法,包括从父类继承的和实现接口中的方法体,然后循环遍历每个方法,判断当前方法上是否存在@RequestMapping注解信息,进而进行解析,如下图

  5:getMappingForMethod,判断当前方法是否存在@RequestMapping注解,如果没有直接返回null,如果存在会将@RequestMapping信息封装为一个RequestMappingInfo,然后继续解析类上的@RequestMapping也封装为一个RequestMappingInfo,然后方法上的和类上的进行合并比如路径信息就是类上的+方法上的。先看一下RequestMappingInfo的结构,如下图

  6:registerHandlerMethod方法底层调用的为register方法,其作用就是将解析出的路径处理类方法以及适用于当前方法的requestMappingInfo进行关系绑定,具体如下

  经过上述过程项目中的所有@RequestMapping注解信息就已经解析缓存完毕。当请求到达后根据路径信息先去pathLookup集合中找到对应的RequestMappingInfo,然后将封装在RequestMappingInfo中的所有Condition跟请求中的进行比较,如果全部匹配,则根据RequestMappingInfo从registry集合拿到MappingRegistration,里面包含handlerMethod,而handlerMethod中又包含目标类和目标方法。

本文地址:https://sicmodule.kub2b.com/quote/4958.html     企库往 https://sicmodule.kub2b.com/ , 查看更多

特别提示:本信息由相关用户自行提供,真实性未证实,仅供参考。请谨慎采用,风险自负。


0相关评论
相关最新动态
推荐最新动态
点击排行
网站首页  |  关于我们  |  联系方式  |  使用协议  |  版权隐私  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  网站留言  |  RSS订阅  |  违规举报  |  鄂ICP备2020018471号