手写一个迷你版Spring MVC框架
前期准备
我这里要写的是一个迷你版的Spring MVC,我将在一个干净的web工程开始开发,不引入Spring,完全通过JDK来实现。
我们先来看一眼工程:
工程代码结构
第一:在annotation包下,我将提供自定义的注解,为了方便理解,就和Spring MVC保持一致。
第二:为了模拟Spring MVC的方法调用链,我这里提供Controller/Service/Dao层进行测试。
第三:提供自己的DispatcherServlet完成核心处理逻辑。
关于自定义注解
JDK提供了几个元注解,比如:
@Documented : JavaDoc文档
@Target:标志此注解可以修饰在哪些地方,类,成员变量,方法...
@Retention:Annotation的生命周期,一般情况下,我们自定义注解的话,显然需要在运行期获取注解的一些信息。
看一下我这边的自定义注解:
模拟Spring MVC的@Controller注解
@Qualifier提供依赖注入
@RequestMapping提供URL地址处理映射
Dao层注解
Service层注解
编写核心控制器:DispatcherServlet
在Spring MVC中,DispatcherServlet是核心,下面我们来实现它。首先来说,Spring MVC中的DispatcherServlet说到底,还是HttpServlet的子类,因此我这边自己的DispatcherSerlvet需要extends HttpServlet。
pom.xml:
提供servlet依赖
看DispatcherServlet的定义:
DispatcherServlet
@WebServlet是什么?
其实,以前我们定义一个Servlet,需要在web.xml中去配置,不过在Servlet3.0后出现了基于注解的Servlet。
仔细观察,你会发现,这个DispatcherServlet是自启动,而且传入了一个参数。
要知道,在Spring MVC中,要想基于注解,需要在配置中指明扫描的包路径,就像这个样子:
<context:component-scan base-package="com.zfz.myspringmvc">
</context:component-scan>
为了方便,我这里就通过初始化参数直接将需要扫描的基包路径传入。
init初始化处理:
init()
其实,在init中,我们主要是完成了什么呢?
第一:我们应该去扫描基包下的类,得到信息A。
第二:对于@Controller/@Service/@Repository注解而言,我们需要拿到对应的名称,并初始化它们修饰的类,形成映射关系B。
第三:我们还得扫描类中的字段,如果发现有@Qualifier的话,我们需要完成注入。
第四:我们还需要扫描@RequestMapping,完成URL到某一个Controller的某一个方法上的映射关系C。
其实,Spring MVC的处理流程,就是类似这样的!
扫描基包:
扫描基包
注意,基包是X.Y.Z的形式,而URL是X/Y/Z的形式,需要转换。
实例化:
实例化
从这里你可以看出,我们完成了被注解标注的类的实例化,以及和注解名称的映射。
依赖注入:
依赖注入
以前,我们总是说Spring IOC,上面不就是在做这个事情么?
URL映射处理:
URL映射处理
URL,我们需要提取出来,映射到Controller的Method上。
doGet/doPost:
doGet/doPost
在doPost方法中,非常简单,我们只需要提取出URL,通过URL映射到Method上,然后通过反射的方式进行调用即可。
Make it run!
Controller层:
UserController
Service层:
UserService
UserServiceImpl
Dao层:
UserDao
UserDaoImpl
运行结果:
result
OK,到这里,一个迷你版的Spring MVC就开发完成了。
PS:如果觉得我的分享不错,欢迎大家随手点赞、转发。
Java团长
专注于Java干货分享
扫描上方二维码获取更多Java干货
手写一个迷你版Spring MVC框架相关推荐
- 如何手写一个迷你版的RPC
点击上方"Java后端技术栈"关注 持续推送技术干货 前言 在实际后台服务开发中,比如订单服务(开发者A负责)需要调用商品服务(开发者B负责),那么开发者B会和A约定调用API,以 ...
- local tomcat 找不到springmvc里的包_唰唰的手撕一个简单的Spring Mvc 框架
@[TOC] 自定义实现Spring Mvc框架 前言 在使用Spring Mvc时候我们需要配置一个中央处理器DispatcherServlet用于分发请求,根据url查找处理器,然后再根据处理器 ...
- 手写一个迷你版的 Tomcat 猫
点击上方"芋道源码",选择"设为星标" 管她前浪,还是后浪? 能浪的浪,才是好浪! 每天 8:55 更新文章,每天掉亿点点头发... 源码精品专栏 原创 | J ...
- 手写一个迷你版的 Tomcat 喵【转】
原文地址:https://blog.csdn.net/FYGu18/article/details/82921115 前言 Tomcat,这只3脚猫,大学的时候就认识了,直到现在工作中,也常会和它打交 ...
- 极光im java_java手写一个迷你版的Tomcat代码分享
前言 Tomcat,这只3脚猫,大学的时候就认识了,直到现在工作中,也常会和它打交道.这是一只神奇的猫,今天让我来抽象你,实现你! Write MyTomcat Tomcat是非常流行的Web Ser ...
- 手写一个迷你版的 Tomcat 喵
前言 Write MyTomcat 2.1 MyRequest 2.2 MyResponse 2.3 MyServlet 2.4 ServletMapping 和 ServletMappingConf ...
- 【手写系列】写出我的第一个框架:迷你版Spring MVC
你没有看错标题,今天,我将实现我人生中第一个框架,^_^ 前期准备 我这里要写的是一个迷你版的Spring MVC,我将在一个干净的web工程开始开发,不引入Spring,完全通过JDK来实现. 我们 ...
- 【手写系列】写一个迷你版的Tomcat
前言 Tomcat,这只3脚猫,大学的时候就认识了,直到现在工作中,也常会和它打交道.这是一只神奇的猫,今天让我来抽象你,实现你! Tomcat Write MyTomcat Tomcat是非常流行的 ...
- 迷你版Spring MVC 实现
2019独角兽企业重金招聘Python工程师标准>>> 迷你版Spring MVC 实现 本文参考自 写出我的第一个框架:迷你版Spring MVC ,写这篇文章用于个人学习的记录. ...
最新文章
- java面试时候算法题多吗_java程序员面试中最容易被问到的18个算法题(附答案!)...
- HTML5 Canvas编写五彩连珠(3):设计
- python_bomb----函数高级特性(生成器)
- 张洋:浅析PageRank算法
- Java中的goto实现
- 【AI白身境】深度学习必备图像基础
- 提升销售人员的信息处理能力
- JAVA中反射的实现过程和作用分别是什么?
- wxWidgets:支持国际化
- lua把userdata写入mysql_Lua教程(十九):userdata
- 我的博客是怎么自定义的
- uva 10127——ones
- SVN Cannot merge into a working copy that has local modifications
- linux如何做bond4,linux系统做bond
- VSCode 扩展中出现严重漏洞,可导致供应链攻击
- 一步步教你轻松学主成分分析PCA降维算法
- 互联网轻量级框架SSM-查缺补漏第八天(MyBatis插件plugin使用及原理)
- DevExpress WinForm 控件汉化方法 代码(一)
- java开源商城 java搭建直播商城 微服务商城 百万千万级商城 分布式商城 VR全景商城 saas商城 b2b2c商城 o2o商城 积分商城 秒杀商城 拼团商城 分销商城 短视频商城 商家入驻商城
- 搜索引擎最经典的书籍——《走进搜索引擎》(梁斌 著)百度网盘免费下载