写点什么

深入解析 SpringMVC 核心原理:从手写简易版 MVC 框架开始 (SmartMvc)

用户头像
Silently9527
关注
发布于: 2020 年 12 月 28 日

简介

SpringMVC 可以说的上是当前最优秀的 MVC 框架,采用了松散耦合可插拔组件结构,比其他 MVC 框架更具扩展性和灵活性;为了提高框架的扩展性和灵活性,设计了松耦合可插拔的组件。理解 SpringMVC 的原理,在面试或工作中都十分的重要。


SpringMVC 的原理在网络上到处都可以找得到,但是写的都很概括、零散;对应阅读源码经验较少的小伙伴来说,

自己去看源码被很多细节所干扰阻碍,不能够很好的抽离出 springMVC 原理的主线。


自己想和小伙伴一起从手写简易版的 SmartMVC 框架出发,理出 SpringMVC 的主线并深入理解 SpringMVC 的原理。框架代码开发加上文档编写大概花费时间一个月



项目结构


SmartMvc├── docs -- 开发文档├── smart-mvc -- 实现mvc功能的核心代码├── smartmvc-springboot-autoconfigure -- SmartMvc的自动化配置├── smartmvc-springboot-demo -- SmartMvc的demo项目├── smartmvc-springboot-starter -- SmartMvc的starter└── spring-mvc-demo -- SpringMVC的demo
复制代码



IDE、源码、依赖版本

  • JDK 的版本 1.8

  • 整个开发过程中我使用的 IDE 都是 IDEA,可以根据读者自己习惯选择。当然我推荐是用 IDEA

  • 开发 SmartMVC 我们需要使用到 Spring,我使用的版本5.2.9

  • 整个框架已经开发完成,SmartMVC 的源码地址:

1. Github: https://github.com/silently9527/SmartMvc

2. 码云:https://gitee.com/silently9527/SmartMvc


大家记得顺手给个 star 哦



约定

  • 为了便于后期理解和使用 SpringMVC,所以在 SmartMVC 中所有组件的名称都和 SpringMVC 的保持一致

  • 为了让 SpringMVC 的核心流程更加的清晰,减少的干扰,我拿出了自己 18 米的砍刀大胆的砍掉了 SpringMVC 中很多细节流程,达到去枝干立主脑,让我们能够更加顺畅的理解请求的处理过程



文档目录


所有开发文档都在项目的docs目录下


  • 01 SmartMVC 总体架构规划

  • 02 RequestMappingHandlerMapping 初始化过程

  • 03 拦截器 HandlerInterceptor

  • 04 HandlerMapping 获取对应的 Handler

  • 05 参数解析器 HandlerMethodArgumentResolver

  • 06 返回解析器 HandlerMethodReturnValueHandler

  • 07 Handler 执行器 InvocableHandlerMethod

  • 08 实现 RequestMappingHandlerAdapter

  • 09 视图 InternalResourceView、RedirectView

  • 10 视图解析器 ViewResolver

  • 11 DispatcherServlet 实现 doDispatch 来完成请求逻辑

  • 12 全局异常处理器 HandlerExceptionResolver

  • 13 核心配置类 WebMvcConfigurationSupport

  • 14 SmartMvc 与 SpringBoot 集成(一)

  • 15 SmartMvc 与 SpringBoot 集成(二)

  • 16 SmartMvc 项目实战



SpringBoot 项目中引入 SmartMVC 的步骤


1. 新建一个 SpringBoot 项目,在 pom.xml 中加入 SmartMVC 的 starter


<dependency>    <groupId>com.silently9527</groupId>    <artifactId>smartmvc-springboot-starter</artifactId>    <version>1.0.0-SNAPSHOT</version></dependency>
复制代码


2. 修改 SpringBoot 生成的启动类,指定 SmartMVC 的`ApplicationContextClass`


@SpringBootApplicationpublic class SmartmvcSpringbootDemoApplication {
public static void main(String[] args) { SpringApplication application = new SpringApplication(SmartmvcSpringbootDemoApplication.class); application.setApplicationContextClass(ServletWebServerApplicationContext.class); application.run(args); }}
复制代码


写到最后(点关注,不迷路)

在开发文档中可能会存在错误或不足之处,欢迎大家指出。


创作不易,希望朋友们可以点赞评论关注三连


原文地址,转载请注明出处:[https://silently9527.cn/archives/88](https://silently9527.cn/archives/88)


用户头像

Silently9527

关注

公众号:贝塔学JAVA 2018.05.09 加入

Simple Programmer, Make the complex simple

评论

发布
暂无评论
深入解析SpringMVC核心原理:从手写简易版MVC框架开始(SmartMvc)