• spring mvc实现原理源码相关解读


    前提提要:spring-web 提供了核心 HTTP 集成,包括一些便捷的 servlet 过滤器, Spring HTTP 调用,用于集成其它 web 框架的基础结构以及技术(Hessian,Burlap)。

    spring-webmvc 是 Spring MVC 的一个实现。spriing-webmvc 依赖于 spring-web,这样包含它就会间接地添加 spring-web。不必显示添加 spring-web。

    如果你不使用 Spring MVC ,但想要借助其它 Spring 支持的 web 相关技术的优势,那么你只需依赖 spring-web 。

     

    spring mvc相关启动核心最开始的方法,由进入ioc容器加载操作,tomcat在启动时会扫描所有项目META-INF/services/javax.servlet.ServletContainerInitializer这个文件(spi机制实现,关于spi请看我的另一篇博客),然后执行相关的实现类中的onStartup方法,之后将会调用

     

    之后会进入到这个类的相关方法进行操作,实现对于用户配置类的注册,

     至此spring mvc入口加载操作完成。

     

    以上操作完成之后tomcat运行相关StandardContext中listener方法对于之前加载listener类进行对应的相关操作,实现对于spring ioc容器的加载操作。之后将会进行常规的refresh方法操作,对于beandefinition进行解析并创建的对应实例对象然后放到ioc容器,完成所有的spring mvc与spring mvc的执行流程操作。

    ------------------------------以上完成了spring mvc与spring 结合流程,

    以上为spring mvc经典的运行流程图,下面所有的都是对于上面步骤进行相关的详细解析。 

    注意这里,是直接通过tomcat中的listener相关fireContainerEvent方法调用到此方法,用于实现对于spring ioc容器的创建操作,这里的容器类型为AnnotaionConfigWebApplicationContext,下面spring mvc相关的ioc子容器也是此类型的

    之前的ioc容器创建完成之后,tomcat会通过调用servlet api,执行这里的init方法实现对于spring mvc ioc子容器的创建操作。而这里的HttpservletBean中的init方法又是通过

    抽象类GenericServlet中的init方法进化而来,多态的使用的,而最终都是通过
    DispatcherServlet这个实例化对象中的相关操作实现的,而这里对象在什么时候实例化的呢?

     在xml中我们可能有如何操作实现的对于对象实例的实现完成ioc子容器的创建,这里我们使用的是注解方法,显然不是

     

    注意到最开始的哪个spi机制加载过来的类,正是这个类完成了对于dispatcherServlet对象的创建操作,之后在调用相关init方法完成对于子容器的创建操作。

    --------------------------------------------------------------------------------------------------------------------到此spring mvc与spring相关工程启动工作结束

    下面开始介绍spring mvc对应的执行流程 

    spring mvc源码阅读的入口方法dispactherServlet.doService方法

    spring mvc url与方法连接关系 

    spring mvc中传参获取原理

     

    执行url中链接中方法

    拦截器执行原理

    ------------------------------------------------------------到此spring mvc与spring结合原理与spring mvc执行流程源码解析结束

  • 相关阅读:
    Codeforces 611C. New Year and Domino 动态规划
    POJ2585 Window Pains 拓扑排序
    HDOJ1242 Rescue(营救) 搜索
    codeforces 数字区分 搜索
    ZOJ2412 Farm Irrigation(农田灌溉) 搜索
    hdu 4389 X mod f(x) 数位dp
    hdu 4734 F(x) 数位dp
    Codeforces Beta Round #51 D. Beautiful numbers 数位dp
    hdu 3652 B-number 数位dp
    bzoj 1026: [SCOI2009]windy数 数位dp
  • 原文地址:https://www.cnblogs.com/chaojibaidu/p/14940550.html
Copyright © 2020-2023  润新知