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执行流程源码解析结束

原文地址:https://www.cnblogs.com/chaojibaidu/p/14940550.html