在学习完Spring框架之后, 我们知道了 Spring容器, IOC, AOP, 事务管理, SpringMVC 这些Spring的核心内容, 也知道了它们底层实现的基本原理, 比如Spring容器就是个Map映射, IOC底层就是反射机制, AOP底层是动态代理, SpringMVC不就是对Servlet进行了下封装嘛! 哈哈, 当然这些只是些皮毛, Spring除此之外还有更加复杂的设计, 但我们完全可以抛弃那些复杂的设计, 通过这些底层原理自己来写个Spring框架. 写完之后, 相信我们会对Spring框架有个更加深刻的理解.
前置知识
在自己动手写Spring框架之前, 我们得先了解下Spring框架的核心知识点, 如下:
Spring基础
Spring AOP
Spring事务管理
Spring MVC
Java反射机制
动态代理
Java注解
代码下载
在开始动手写博客之前, 我已经完成了自己的Spring框架, 并给它取名为 handwritten-mvc-framwork, GitHub地址为:
https://github/tyshawnlee/handwritten-mvc.git
大家可以 clone 到自己的IDE中, 然后跟着下面的博客我们一起学习.
项目导入后结构如下:
其中, handwritten-mvc-framwork 为自己实现的Spring框架, handwritten-mvc-example 为该框架的实例.
开始
(1) 建立框架
我们首先创建一个Maven项目, 取名为 handwritten-mvc-framwork, 我们尽可能少的使用第三方依赖, 精简后的依赖如下:
<dependencies>
<!-- Servlet -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
<!-- JSP -->
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.2</version>
<scope>provided</scope>
</dependency>
<!-- JSP标准标签库 -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
<scope>runtime</scope>
</dependency>
<!-- MySQL -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.33</version>
<scope>runtime</scope>
</dependency>
<!--数据库连接池-->
<dependency>
<groupId>org.apachemons</groupId>
<artifactId>commons-dbcp2</artifactId>
<version>2.0.1</version>
</dependency>
<!--JDBC工具类库-->
<dependency>
<groupId>commons-dbutils</groupId>
<artifactId>commons-dbutils</artifactId>
<version>1.6</version>
</dependency>
<!-- 日志框架 -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.7</version>
</dependency>
<!-- 动态代理依赖 -->
<dependency>
<groupId>cglib</groupId>
<artifactId>cglib</artifactId>
<version>2.2.2</version>
</dependency>
<!-- 通用工具包 -->
<dependency>
<groupId>org.apachemons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.3.2</version>
</dependency>
<!--集合工具包-->
<dependency>
<groupId>org.apachemons</groupId>
<artifactId>commons-collections4</artifactId>
<version>4.0</version>
</dependency>
<!--JSON依赖-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.49</version>
</dependency>
</dependencies>
(2) 实现Spring容器和IOC
手写Spring框架之IOC
(3) 实现Spring MVC
手写Spring框架之MVC
(4) 实现Spring AOP和事务管理
手写Spring框架之AOP
更多推荐
手写Spring框架
发布评论