zoukankan      html  css  js  c++  java
  • SpringMVC源码(未完工)

    1、RequestMappingHandlerMapping实现了InitializingBean接口,会在实例化之后,调用(父类的)initHandlerMethods方法,遍历beanname,看看是不是handler,把handler中的每一个method都装配成一个HandlerMethod,放到mappingRegistry中。

    2、DispatchSevlet的doDispatch会调用RequestMappingHandlerAdaptor的handle方法,内部逻辑就是把上面mappingRegistry中的HandlerMethod取出来,解析方法参数,执行,再处理返回结果。RequestMappingHandlerAdaptor之所以叫adaptor,其实就是适配RequestMappingHandlerMapping,单独的RequestMappingHandlerMapping只能执行方法。刚才说的参数解析处理返回结果这些附属方法,要在RequestMappingHandlerAdaptor中做,RequestMappingHandlerAdaptor中有argumentResolvers、returnValueHandlers、parameterNameDiscoverer 这些属性。【parameterNameDiscoverer之所以能读取方法参数名,是因为class文件的方法表中,指向的属性表里面的localVariableTable保存了参数名的信息】

    3、springmvc拦截器的原理:在WebMvcAutoConfiguration中,会将RequestMappingHandlerMapping注册,在注册过程中,父类WebMvcConfigurationSupport的258行,new一个registry,把spring工厂中所有WebMvcConfigurer类型的addInterceptors都调用一下(registry是方法的参数),把所有拦截器都收集到registry中,赋值给RequestMappingHandlerMapping的属性。

    4、MessageConverters,用的是WebMvcConfigurer接口的是WebMvcAutoConfiguration的另一个内部类WebMvcAutoConfigurationAdapter,里面涉及到cglib动态代理。

  • 相关阅读:
    abstract关键字
    final关键字
    Vue使用枚举类型实现HTML下拉框
    第八节 pandas读取和保存文件
    第七节 pandas新建数据框的两种方式
    第六节 numpy的常用属性和方法
    第五节 numpy的简单使用
    第三节 matplotlib绘制直方图
    第三节 matplotlib绘制条形图
    第二节 matplotlib绘制散点图
  • 原文地址:https://www.cnblogs.com/chuliang/p/9724513.html
Copyright © 2011-2022 走看看