实现 IOC&DI 容器与简易 MVC 框架

一. 写在前头

项目地址:https://github.com/Gintoki-97/webmvc
项目描述:

  1. IOC&DI 容器的基本实现,可以通过 XML 的方式配置 Bean,容器会自动扫描并处理依赖关系;而控制器层则同时提供了基于 XML 及扫描两种方式。
  2. 手动对 SpringMVC 进行了实现,流程与 SpringMVC 的基本思想一致。
  3. 提供了基于 JDBC 操作数据库的便捷工具类,可类比为简化的 JdbcTemplate。

项目目的:代码写得很简单,可以便于理解 Spring IOC 实现的基本思路以及 SpringMVC 的处理流程。

有关 webmvc 如何使用的问题:
  1. 从 Github 下载源码,确保代码已经保存到本地。
  2. 进入到 %root%/src/webmvc,查看 pom.xml 中 version 的信息,以目前版本为例,版本号为 2.0.1。
  3. 在当前目录下使用命令 mvn package,会在当前目录下生成 target 目录,而 target 目录下就包含完整的 webmvc Jar 包。
  4. 进入到 target 目录后,再运行命令 mvn install:install-file -Dfile=webmvc-2.0.1.jar -DgroupId=cn.gin -DartifactId=webmvc -Dversion=2.0.1 -Dpackaging=jar 可以将这个 Jar 包安装包本地仓库。
  5. 在代码中像使用其它依赖一样,将对应的 Maven 坐标填入 dependency 中就会从本地仓库引入刚才打包成功的 webmvc 的 Jar 包。

%root% 表示 webmvc 解压后项目的根路径;
%src%表示 %root%/src/webmvc/src/main/java;

二. 核心类描述

  1. IOC 相关
/**
 * ~ 应用上下文
 * 
 * 根据 ApplicationContextConfig 中的各项参数,初始化容器。加载指定
 * 的配置文件、初始化所有的 Bean、启动 MVC 组件及注解扫描功能。
 **/
cn.gin.webmvc.context.ApplicationContext

/**
 * ~ 应用上下文配置映射类
 * 
 * 用于将应用配置文件(默认 beans.xml)映射为 Java 中的类,提供给 
 * ApplicationContext。上下文对象会根据配置文件做出相应操作。
 * 
 * 比如读取系统中的自定义配置文件、初始化配置文件中的 Bean、处理 
 * 依赖关系、初始化 MVC 组件等。
 **/
cn.gin.webmvc.context.ApplicationContextConfig
  1. MVC 相关
/**
 * ~ Annotation
 * 
 * 功能类似于 SpringMVC 中的 RequestMapping,用于指定控制器或者方 
 * 法对应的 URL 映射。
 **/
cn.gin.webmvc.anno.RequestMapping

/**
 * ~ Annotation
 * 
 * 功能类似于 SpringMVC 中的 RequestMethod,指示方法所能支持的 
 * HTTP method 类型。目前只包含 GET 和 POST,其它方法同理。
 **/
cn.gin.webmvc.anno.RequestMethod

/**
 * ~ 前端控制器
 * 
 * 功能类似于 SpringMVC 中的 DispatcherServlet,接收到用户请求后, 
 * 委托 ControllerMapping 查找对应的 Controller。在 Controller 处理完毕 
 * 后则根据处理结果对客户端进行响应,并同步 RequestMap、 
 * SessionMap、Cookie 等信息。
 **/
cn.gin.webmvc.controller.DispatcherServlet

/**
 * ~ 标记接口
 * 
 * 功能类似于 SpringMVC 中的 @Controller 注解,自动扫描组件在扫描 
 * 指定 package 时会根据此接口来区分是否是控制器,并在检查完毕后将 
 * 所有控制器移交给 ControllerMapping 进行管理。
 **/
cn.gin.webmvc.controller.Controller

/**
 * ~ 控制器映射器
 * 
 * 功能类似于 SpringMVC 中的 HandlerMapping,前端控制器根据用户请 
 * 求创建一个 RequestDefinition,并将此对象交给控制器映射器。

 * 映射器可以根据 RequestDefinition 来找到唯一一个与之相匹配的 
 * ControllerAdaptor,也就相当于找到了对应的处理器。
 **/
cn.gin.webmvc.controller.ControllerMapping
cn.gin.webmvc.controller.ControllerMapping.RequestDefinition

/**
 * ~ 控制器适配器
 * 
 * 功能类似于 SpringMVC 中的 HandlerAdaptor。
 * 
 * 为什么需要一个适配器去处理请求而不是直接交给处理器去处理,这个 
 * 问题通过 ControllerAdaptor 的代码可以很显然看出来。
 * 我们都知道,类是无法直接提供服务的,最终真正处理请求的肯定是类 
 * 中的某一个方法,如果直接返回一个 ControllerMapping,那么前端控制 
 * 器并不知道要执行这个控制器的哪个方法。
 * 
 * 适配器知道要交给哪个类的哪个方法执行,它处于前端控制器和控制器 
 * 之间,作用确实像一个适配器一样。前端控制器不需要也不能让控制器 
 * 直接去处理,就让适配器去执行这一操作。这样一来整个流程就顺理成 
 * 章了。
 **/
cn.gin.webmvc.controller.ControllerAdaptor
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,734评论 6 505
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,931评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,133评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,532评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,585评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,462评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,262评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,153评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,587评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,792评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,919评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,635评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,237评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,855评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,983评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,048评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,864评论 2 354