HandlerMapping时序图
2018-05-22 14:10:43 0 举报
springMVC 时序图1----HandlerMapping
作者其他创作
大纲/内容
AbstractUrlHandlerMapping
将url模板参数set到request中
SimpleUrlHandlerMapping
参数Map1:HandlerMethods------匹配条件和method的对应关系(1:1)参数Map2:urlMap------URL和匹配条件的对应关系(1:N)参数Map3:nameMap------name和匹配条件的对应关系(1:N)--------------------------------------------------------------------参数3主要通过name获取URL时使用,一般不使用。根据name获取url举例:GoController---index()---对应的url:/index${s:mvcUrl('GC#Index')}
afterPropertiesSet()
initHandlerMethods()
AbstractHandlerMethodMapping
1.预处理:将所有url前添加\"/\"2.调用父类registerHandler
参数1:Interceptor参数2匹配:mappedInterceptors参数3不需:adaptedinterceptors
AbstractHandlerMapping
整体架构已经在父类中定义,子类实现Map的初始化主要是将bean作为handler
模板方法:子类实现为: (1)获取方法的注释 (2)根据注释创建new RequestMappingInfo--mapping
核心:获取处理器 获取责任链
HandlerMapping
2
registerHandler(urlMap)
1.直接:从handlerMaps中获取2.匹配:PatchMatcher 记入String bestPatternMatch
detecthandlers()
将Handler保存在map中第一步:获取Handler类对象 第二步:遍历所有类对象的方法第三步:获取方法的匹配条件 第四步:将匹配条件和方法保存到mappings(method.mapping)第五步:将选出的方法进行注册
getMappingForMethod()
1
RequestMappingInfo
RequestCondition
AbtrcactDetectiingHandlerMapping
detectHandlerMethods()
1.获取容器中的beanName2.调用父类registerHandler
exposePathWithMapping(String,String)
参数1:Object handler参数2[]:interceptors 参数3List:interceptorList
isHandler()
4.创建责任链容器
RequestMappingHandlerMapping
第一步:获取所有beanNames 第二步:使用isHandler()模板方法进行判断 ,子类获取被注释的bean 第三步:使用detectHandlerMethods()将handler保存到map
HandlerExecutionChain getHandler(request)
最佳路径String bestMatchingPattern匹配条件String pathWithMapping
3.构建责任链
内部拦截器UriTemplateVariablesHandlerInterceptor
1.url对应Handler放入Map2.单独定义了处理“/”的rootHandler3.单独定义了处理“/*”的defulatHandler
1.从request中获取lookupPath
Handler getHandlerInternal(request)
HandlerExecutionChain
自定义urlMap的两个作用:1.方便配置 2.在注册handler之前做一些预处理动作
HandlerMethod getHandlerInternal(request)
参数1:HandlerMethods参数2:UrlMap 参数3:NameMap
5.添加拦截器U
getHandler
模板方法,根据beanName解析url
继承了InitializingBean接口,Spring会自动调用其afterPropertiesSet()方法
将Method作为Handler使用@requestMapping所注释的方法就是这种Handler
detemineUrlsForHandler()
HandlerExecutionChain getHandlerExecutionChain (request)
将handler注册到Map中
内部拦截器PathExposingHandlerInterceptor
2.获取默认和/ 对应的handler
从map中获取url对应的handler 没有:判断- / 设置 rootHandler 判断- /* 设置 defulatHandler 存入put-----map 有:map中的handler与传入的handler进行比对,不一样则异常
exposeUriTemplateVariables(String)
子类有BeanNameUrlHandlermapping:检查beanName和alias以'/'开头AbstrctControllerHandlerMapping:检查注释了@Controller和实现Controller接口的Bean
6.添加责任链P
将最佳路径与匹配条件set到request中
收藏
0 条评论
回复 删除
下一页