Spring MVC 源码解析

写在前面

        在分析 Spring AOP 源码之前,如果你对 Spring IOC、依赖注入(DI) 原理不是很清楚,建议您先了解一下:Spring IOC 源码解析、Spring 依赖注入(DI) 源码解析,这样或许会让你的思路更加清晰。

1.什么是 MVC

        MVC 作为一种设计模式,并不是仅限于 Java Web 应用,还包括许多应用,比如前端、PHP、.NET 等语言。之所以那么做的根本原因在于解耦各个模块

    MVC 是 ModelViewController 的缩写,分别代表 Web 应用程序中的 3 种职责。

  • 模型(Model):用于存储数据以及处理用户请求的业务逻辑。
  • 视图(View):向控制器提交数据,显示模型中的数据。
  • 控制器(Controller):根据视图提出的请求判断将请求和数据交给哪个模型处理,将处理后的有关结果交给哪个视图更新显示。

2.Spring MVC

基于 Servlet 的 MVC 模式的具体实现如下:

  • 模型:一个或多个 JavaBean 对象,用于存储数据(实体模型,由 JavaBean 类创建)和处理业务逻辑(业务模型,由一般的 Java 类创建)。
  • 视图:一个或多个 JSP 页面,向控制器提交数据和为模型提供数据显示,JSP 页面主要使用 HTML 标记和 JavaBean 标记来显示数据。视图层 Spring MVC 框架是可配置的,并不关心使用的视图技术,你还可以选择 Velocity、Freemarker 等。
  • 控制器:一个或多个 Servlet 对象,根据视图提交的请求进行控制,即将请求转发给处理业务逻辑的 JavaBean,并将处理结果存放到实体模型 JavaBean 中,输出给视图显示。

3.Spring MVC 工作流程

Spring MVC 源码解析_第1张图片

各个组件作用如下:
  • 前端控制器(DispatcherServlet):接受用户请求,分发请求,响应结果;
  • 处理器映射器(HandlerMapping):根据请求 URL 查找处理器;
  • 处理器适配器(HandlerAdapter):适配映射器返回的处理器;
  • 处理器(Handler):用于处理业务请求,项目中叫做 Controller
  • 视图解析器(ViewResolver):根据视图名称,进行查找,并生成视图对象(此处可自行配置);
  • 视图(View):用于视图的渲染操作,是一个接口。

4.Spring MVC的初始化

  Spring MVC的初始化主要有两部分组成:

  1.初始化Spring IOC

  • 通过配置ContextLoderListener完成

  2.初始化映射请求上下文

  • 通过配置 DispatcherServlet 完成

注意 ⚠️:如果没有配置 Spring IOC 的初始化类 ContextLoderListener,那么 DispatcherServlet 在它初始化的时候会对 Spring IOC 进行初始化,一般来说最好在DispatcherServlet 初始化之前就完成 Spring IOC 初始化。(附:web.xml配置信息)


<context-param>
	<param-name>contextConfigLocationparam-name>
	<param-value>classpath:spring.xmlparam-value>
context-param>
 
<listener>
	<listener-class>org.springframework.web.context.ContextLoaderListenerlistener-class>
listener>
   
<servlet>
    <servlet-name>mvcDemoservlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServletservlet-class>
    
    
    
    <load-on-startup>1load-on-startup>
servlet>
<servlet-mapping>
    <servlet-name>mvcDemoservlet-name>
    <url-pattern>/url-pattern>
servlet-mapping>

5.Spring MVC 源码分析从何入手

        相信大家对 Spring MVC 的使用应该有所了解。我们在使用 Spring MVC 时,都会在 web.xml中添加如下配置信息,所以我们就是从 DispatcherServlet 这个类开始分析。
Spring MVC 源码解析_第2张图片
        从图中我们看到 DispatcherServlet 继承自 HttpServlet 类,它也是一个 Servlet 容器。在 Spring 容器启动的时候,Spring MVC就会执行初始化操作。HttpServlet 有两大核心方法:init() 和 service() 方法,init() 方法位于 HttpServletBean 父类下,所以:①我们从 init() 方法解析   ②解析完成后,执行 doService() 方法开始完成 MVC 流程

6.Spring MVC 源码分析时序图  单击放大查看(高清图下载请转至文末链接)

   你也可以直接访问链接获取:https://www.processon.com/view/5e69f2fde4b00fb1da123491

7.源码分析

        此处不再一步步介绍源码,你可以按照 6.Spring MVC 源码分析时序图 ,打开源码来进一步分析,此处粘贴过多代码无多大意义。附 spring-framework-5.0.2.RELEASE (中文注释)版本,直接解压 IDEA 打开即可

地址: 1.spring-framework-5.0.2.RELEASE (中文注释)版本

           2.网盘地址:spring-framework-5.0.2.RELEASE (中文注释)版本(提取码:uck4 )


恭喜您,枯燥源码看到这里。 Spring MVC 源码介绍到此为止


博主写作不易,来个关注呗

求关注、求点赞,加个关注不迷路 ヾ(◍°∇°◍)ノ゙

博主不能保证写的所有知识点都正确,但是能保证纯手敲,错误也请指出,望轻喷 Thanks♪(・ω・)ノ

你可能感兴趣的:(#,Spring5,源码分析)