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