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 条评论
 下一页
  
  
  
  
  
  
  
  
  
 