百万架构师第十五课:源码分析:Spring 源码分析:SpringMVC核心原理及源码分析|JavaGuide

2025/1/12 23:03:09

本文主要是介绍百万架构师第十五课:源码分析:Spring 源码分析:SpringMVC核心原理及源码分析|JavaGuide,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

Spring MVC 一种 Web 开发的设计模式

实现了不同业务层面的解耦,隔离。

http://www.dairan.com?id=?&type=

Model:

​ 将传输数据封装成一个完成的载体。把很多参数传成一个Model。就是一种设计模式,你也可以不封装。

View:

​ 视图,用来展示或者输出的模块(HTML、JSP、JSON、String、Swing、XML…)

Control:

​ 控制交互的一个中间组件,由它来根据用户请求分发不同任务从而得到不同的结果。

DTO,POJO 就是一个 Model

MVC :基于项目开发的设计模式。用来解决用户和后台交互的问题。

J2EE标准

JSP 页面是一个万能的组件,可以写 HTML、写 JS、写 JAVA 逻辑、写 SQL 语句

MVC 框架应运而生: Struts1、Struts2、Webwork、Spring MVC

SpringMVC: 只是 MVC 设计模式的应用典范。给 MVC 的实现制定了一套标准

M:支持将 URL 参数自动封装成一个 Object 或者 Map

V:自己只有一个默认的 template、支持扩展、自定义 View,能够自定义解析

C:做到把限制放宽了,任何一个类,都有可能是一个 Controller

Struts 对用户的要求太高了,Spring MVC 对应用户的要求几乎没有。写几个 annotation 就好了

  • DispatcherServlet
    • FrameworkServlet
      • HttpServletBean
      • ApplicationContextAware - setContextInitializers
    • FrameworkServlet - refresh() - onRefresh()
@Override
protected void onRefresh(ApplicationContext context) {
   // Strategy 策略
   initStrategies(context);
}

protected void initStrategies(ApplicationContext context) {
   // 有九个策略
   // 针对于每个用户请求,都会经过一些处理的策略之后,最终才能会有结果输出。
   // 每种策略可以自定义敢于,但是最终的结果都是一致
   // ModelAndView

   // ==========这里就是传输中的 Spring MVC 中的九大组件=========

   initMultipartResolver(context); // 文件上传解析,如果请求类型是 multipart 将通过 MultipartREsolver
   initLocaleResolver(context);// 本地化解析
   initThemeResolver(context);// 主题解析

   /** 我们自己会实现  */
   initHandlerMappings(context);// 通过 HandlerMapping,将请求映射到处理器
   /** 我们自己会实现*/
   initHandlerAdapters(context);// 通过 HandlerAdapter 继续进行多类型的参数的动态匹配

   initHandlerExceptionResolvers(context);// 如果执行过程中遇到异常,将交给 HandlerExceptionResolvers
   initRequestToViewNameTranslator(context); // 直接解析请求到视图名
   /** 我们自己会实现*/
   initViewResolvers(context);// 通过 viewResolver 解析逻辑试图到具体试图实现
   initFlashMapManager(context); // flash 映射管理器
}
请求过程:

SpringMVC请求过程

FrameworkServlet.processRequest()

  • doService()
    • DispatcherServlet.doService()

抽象方法调用子类实现,叫做模板方法模式。

MVC 的基本原理:

SpringMVC基本原理

Spring url 是可以支持正则表达式的。

Spring MVC 讨论

HandlerMapping 是模范了 Struts ActionMapping

严格地说是 Spring MVC 还支持 Ant Pattern

马哥,那你认为它能够干掉 struts 是因为它的哪一点优点呢?

主要是非 Spring MVC,获取 Bean 的方式比较麻烦

需要通过 Spring 应用上下文获取

并且对于 REST 支持,其他框架相对薄弱

Spring MVC 是 Struts 2 + JAX-RS 的混合体

JAX-RS: Java API for RESTful Web Services

来源于: https://javaguide.net

微信公众号:不止极客



这篇关于百万架构师第十五课:源码分析:Spring 源码分析:SpringMVC核心原理及源码分析|JavaGuide的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程