美文网首页
实现 IOC&DI 容器与简易 MVC 框架

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

作者: 中山桥二十七霸 | 来源:发表于2018-11-25 15:36 被阅读0次

一. 写在前头

项目地址: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

相关文章

网友评论

      本文标题:实现 IOC&DI 容器与简易 MVC 框架

      本文链接:https://www.haomeiwen.com/subject/mjypqqtx.html