基于注解的Spring MVC的URL与Controller映射关系提取的实现分析

      在Spring MVC中,定义了多种URL与Controller映射关系的描述方式。在基于注解的Spring MVC中,采用Java注解的方式描述URL与Controller之间的关系,那么Spring MVC是如何获取这些映射关系,并将其注册到handlerMap中呢?这些问题将是本文研究的重点。

      Spring MVC使用HandlerMapping接口抽象表示通过请求获取Controller的行为,在使用注解驱动的Spring MVC中,HandlerMapping的具体实现类为:DefaultAnnotationHandlerMapping,该类继承自AbstractDetectingHandlerMapping,在AbstractDetectingHandlerMapping类中,定义了方法detectHandlers(),这个方法的目的在于取得所有可能的Controller,并将URL与Controller的映射关系注册到handlerMap中。首先开一下这个方法的代码实现。

      在AbstractDetectingHandlerMapping中,determineUrlsForHandler(String beanName)是一个抽象方法,由具体的子类给出实现,这里我们需要关注的是DefaultAnnotationHandlerMapping类是如何实现该方法的。代码如下:

      上述代码是Spring处理类级别的RequestMapping注解,但是RequestMapping注解也可以定义在方法级别上,determineUrlsForHandlerMethods()方法是获取该类中定义了RequestMapping注解的方法能够处理的所有URL。下面看一下该方法的实现。

       分别获取了类和方法级别的RequestMapping中定义的URL后,基本上完成了URL的提取工作,但是有一种情况需要处理:类和方法中同时定义了URL,这两个URL是如何合并的呢?规则又是怎样的呢?看一下URL合并代码:

           通过以上的处理,基本上完成了bean可以处理的URL信息的提取,在代码中有个方法经常出现:addUrlsForPath(),该方法的目的是将RequestMapping中定义的path添加的URL集合中,如果指定PATH不是以默认的方式结尾,那么Spring将默认的结尾添加到该path上,并将处理结果添加到url集合中。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值