SpriingMvc的HandlerMapping

  SpringMvc里面的Handler具有两种形式

1.方法,对应Java里面的Method对象

2.对象,对应Java里面的Object对象

框架刚开始应该仅仅只针对对象的,提供了一个接口,子类实现接口来构建成对象,但后来改变了思路,提供了更细粒度的调用方式,就是方法调用构成Handler

1.请求的路由

HandlerMapping其实是一个接口,一个顶层抽象的接口,具有非常简洁的一个核心方法定义:

HandlerExecutionChain getHandler(HttpServletRequest request) throws Exception

这里的HandlerExecutionChain 不是一个接口,而是一个类了,为什么这里不继续使用接口呢?我想,使用接口的用意是实现多态,以此来实现扩展。而使用具体的类,那么就是限定这个返回值必须使用这个类,就是限定的意思了。

HandlerMapping其实就是Handler映射的意思,Handler可以认为是处理器,那么整体的意思就是处理器映射。只是根据请求来找寻具体处理这个请求的处理器。

HandlerExecutionChain类也是非常简单的一个类,是一个Object和拦截器列表构成的对象。拦截器用来处理处理请求前后的两个处理面,Object用来处理具体的请求。

其实,JavaEE的Servlet虽然叫Servlet,但是它基本上还是跟Filter具有一样的设计思想,还是责任链的设计模式。这里的拦截器,其实也是具有相同的含义的。

目前都在使用的应该是RequestMappingHandlerMapping这个类了,其他的几种HandlerMapping基本上用不着了。

这个类具有以下几个主要的类:

RequestMappingInfo  请求映射信息,抽象出请求的映射信息,就是采集Request里面能够影响映射的几种基本元素

  包括,url,请求方法,header,参数等等

MappingRegistry 映射注册中心,采集Spring里面的能够形成Handler的Bean的注册中心,存储的是能够处理请求的对象。

Match  匹配行为的对象抽象,因为获得最佳映射需要比较,所以这里对这个行为,有时候,将行为抽象成对象。万物皆对象,此言不虚。

MatchComparator 匹配比较器,排序能力。

猜你喜欢

转载自www.cnblogs.com/weiguangyue/p/9261171.html