# Summer **Repository Path**: chennianfenglou/Summer ## Basic Information - **Project Name**: Summer - **Description**: 从零开始编写Spring[简易版] - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2019-07-30 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## Summer项目 ### 介绍 - Summer项目是本人在学习Spring源码的时候按照SpringMVC的流程编写的一个简易的SpringMVC框架,主要完成以下功能: - 读取配置文件进行包的扫描 - 对所有加入注解的bean进行装配 - 对加了注解的字段进行依赖自动注入 - URL与相应方法的映射 - 请求的分发处理 项目通过实现以上流程完成SpringMVC框架工作的整体过程演示 ### 以下是框架流程的详细步骤说明 #### 项目的结构 Summer项目仅仅是一个单独的Servlet项目,没有引入Spring相关的任何依赖,仅仅使用了一些外部的工具类,我的pom.xml文件如下: ```aidl javax.servlet javax.servlet-api 3.1.0 cn.hutool hutool-all 4.5.10 org.eclipse.jetty jetty-maven-plugin 9.3.12.v20160915 org.projectlombok lombok 1.18.2 ``` 项目使用jetty启动,所以我还配置了jetty插件 ```aidl org.mortbay.jetty maven-jetty-plugin 6.1.26 0 /Summer 4000 ``` #### 整体框架结构 ![注解](./images/zj.png) 除了自定义的这几个注解之外其他的就和平常编写Controller以及Service的流程一样,我的核心代码主要在MyServlet中 #### MyServlet主要做了什么 ##### 加载配置文件,首先读取web.xml中配置的配置文件 把扫描到的所有类全链路径名保存在list中 > 以下是servlet的配置 ```aidl myServlet com.zhang.summer.servlet.MyServlet contextConfigLocation classpath:config.properties 0 myServlet / ``` ##### 遍历所有类,使用反射创建对象`class.forName` 创建对象,将所有我们声明了自己注解的类加入到一个Map中,即IOC-Map ##### 遍历IOC-Map中的所有对象,进行依赖注入 在这里我只判断是`@MyController`注解的类才进行依赖注入 ##### 处理URL和方法之间的映射 将注解了`@MyRequestMapping`的类和方法路径拼接起来,对方法和拼接起来的url路径进行映射,并且对方法参数做特殊处理 ##### 请求分发 在doGet或者doPost请求中通过映射好的url-method找到方法进行请求的分发处理