带着问题学 Spring MVC 源码

Q:什么是 Spring MVC ? ※

Spring MVC 是 Spring Web 的一个重要模块。Spring 支持 Web 应用,Spring MVC 是对 MVC 模式的支持。

Q:MVC 模式? ※

MVC 模式是种经典的软件架构,分 Model 模型、View 视图及 Controller 控制器 三种角色。架构的意图明显区分三种角色的职责,使其不相互依赖。Java 领域最经典的实现 JSP + Servlet + JavaBean,后续也陆续出来了众多优秀框架,SSH 中的 Struts ,还有 SSM 中的 Spring MVC 等。

带着问题学 Spring MVC 源码

Q: Spring 还要什么其他模块? Web?IOC 容器?AOP?※

IOC 容器模块、AOP 模块都是。还有数据访问/集成、Web 等模块都是。这里其他不展开讲,其中 Web 模块建立在 IOC 容器之上,要记住。

来自官网的模块图:

带着问题学 Spring MVC 源码

 

Q: Web 模块包含 springmvc 吗? ※

包含。Web 模块包含 spring-web、spring-webmvc、spring-websocket和spring-webmvc-portlet。其中 web-mvc 是我们要学习源码包。

1. spring-web 模块提供基本 Web 集成功能,包括初始化 IOC 容器等工作。

2. spring-webmvc 包含 MVC 模式的实现和 REST Web 服务的实现。该模块基于了 spring-web 模块。

资料来源自:官方文档 MVC 章节,其他模块具体参考官网。

Q: spring-webmvc 模块具体包含什么内容? ※

spring-webmvc 模块里面包:

  • org.springframework.web.servlet
  • 提供与应用程序上下文基础结构集成的 Servlet,以及 Spring web MVC 框架的核心接口和类。
  • org.springframework.web.servlet.mvc
  • Spring 附带的 Servlet MVC 框架的标准控制器实现。org.springframework.web.servlet.mvc.annotation
  • 用于基于注解的 Servlet MVC 控制器的支持包。
  • org.springframework.web.servlet.mvc.condition
  • 用于根据条件匹配传入请求的公共 MVC 逻辑。
  • org.springframework.web.servlet.mvc.method
  • 用于处理程序方法处理的基于 Servlet 的基础结构,基于在 org.springframework.web.method 包上。
  • org.springframework.web.servlet.view
  • 提供标准的 View 和 ViewResolver 实现,包括自定义实现的抽象基类。org.springframework.web.servlet.view.freemarker
  • 支持将 FreeMarker 集成为 Spring Web 视图技术的类。
  • org.springframework.web.servlet.view.json
  • 支持提供基于 JSON 序列化的 View 实现的类。

上面列出来核心的包。org.springframework.web.servlet.view 包中, View 视图实现有常见的:JSON 、FreeMarker 等。org.springframework.web.servlet.mvc 包中,Controller 控制层实现包括了注解、程序方法处理等封装。自然,看源码先从 org.springframework.web.servlet 包看其核心的接口和类。

Q: 核心类和接口有哪些? ※

DispatcherServlet 类:调度HTTP请求控制器(或者处理器Handler)。

View 视图层

ModelAndView 类:模型和视图的持有者。

View 接口:MVC WEB 交互。该接口的实现负责呈现视图或者暴露模型。

Controller 控制层

HandlerMapping 接口: 请求从 DispacherServlet 过来,该接口定义请求和处理程序对象之间的映射。

HandlerInterceptor 接口:处理程序的执行链接口。

Q: 又是 MVC 的样子,还有吗? ※

哦。对了还有张图:

带着问题学 Spring MVC 源码

所以重要的类还有 ViewResolver、HandleAdapter等。

Q: 谢谢,下篇聊什么?

当然聊重要类的源码实现咯~,下篇见。

如以上文章或链接对你有帮助的话,别忘了在文章结尾处留言,感谢你对评论。

欢迎工作一到五年的Java工程师朋友们加入Java高级互联网架构:793042903
群内提供免费的Java架构学习资料(里面有高可用、高并发、高性能及分布式、Jvm性能调优、Spring源码,
MyBatis,Netty,Redis,Kafka,Mysql,Zookeeper,Tomcat,Docker,Dubbo,Nginx等多个知识点的架构资料)

猜你喜欢

转载自blog.csdn.net/JavaWDB/article/details/89950150