如何实例化requestmappinghandlermapping类

 我来答
匿名用户
2016-09-05
展开全部
RequestMappingHandlerMapping ,用于注解@Controller,@RequestMapping来定义controller.

1 @Controller
2 @RequestMapping(value = "books")
3 public class BookController {
4
5 @RequestMapping(value = "/{id}")
6 @ResponseBody
7 public String getBook(@PathVariable("id") String id) {
8 // ...
9 return id;
10 }
11 }

初始化时,3个类的大致分工如下:
  AbstractHandlerMethodMapping定义整个算法流程;
  RequestMappingInfoHandlerMapping提供匹配条件RequestMappingInfo的解析处理;
  RequestMappingHandlerMapping根据@RequestMapping注解生成 RequestMappingInfo,同时提供isHandler实现

整个初始化工作由AbstractHandlerMethodMapping的initHandlerMethods主导.
  1. 使用BeanFactoryUtils扫描应用下的Object或者直接从容器中获取Object
  2. 迭代类,分别判断isHandler判断目标类是否Handler
    2.1 RequestMappingHandlerMapping.isHandler根据@Controller或@RequestMapping注解判断(有任意一个)
  3. 对handler解析出所有需要分发的方法detectHandlerMethods
    3.1 获取原始的Class<?>
    3.2 使用HandlerMethodSelector.selectMethods过滤具体handler method,预留getMappingForMethod模板方法给子类
      RequestMappingHandlerMapping.getMappingForMethod根据类,方法上的RequestMapping注解生成匹配条件RequestMappingInfo
    3.3 对过滤到的每个method进行注册registerHandlerMethod
      a, 使用createHandlerMethod封装处理器为HandlerMethod
      b, 判断之前是否已经匹配条件对应的处理器是否冲突(相同的匹配条件只能有一个对应的处理器)
      c, 设置匹配条件到handler method的映射关系
      d, 从匹配条件中解析出url,并注册到urlMap(url到匹配条件的映射),这边由RequestMappingInfoHandlerMapping.getMappingPathPatterns实现
  4. 对HandlerMethod进行初始化handlerMethodsInitialized,其实现在什么都没做
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式