# 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
```
#### 整体框架结构

除了自定义的这几个注解之外其他的就和平常编写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找到方法进行请求的分发处理