热门推荐
从源码深入解析:Spring Boot与Spring MVC如何借由@RequestMapping注解精准定位请求路径至目标方法
2024-12-10 21:30

  无论是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中又包含目标类和目标方法。

    以上就是本篇文章【从源码深入解析:Spring Boot与Spring MVC如何借由@RequestMapping注解精准定位请求路径至目标方法】的全部内容了,欢迎阅览 ! 文章地址:https://sicmodule.kub2b.com/quote/4958.html 
     栏目首页      相关文章      动态      同类文章      热门文章      网站地图      返回首页 企库往资讯移动站https://sicmodule.kub2b.com/mobile/,查看更多   
发表评论
0评