# spring-wheel **Repository Path**: stimd/spring-wheel ## Basic Information - **Project Name**: spring-wheel - **Description**: 从零开始构建 Spring 框架,全面重写 SpringFramework、SpringBoot、SpringCloud 三部曲,探究编写大型框架的底层逻辑。 - **Primary Language**: Java - **License**: GPL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 6 - **Forks**: 2 - **Created**: 2022-05-31 - **Last Updated**: 2025-05-07 ## Categories & Tags **Categories**: Uncategorized **Tags**: spring框架, 源码 ## README # spring-wheel ![](docs\image\封面.png) ## 项目介绍 从零开始构建 Spring 框架,全面重写 SpringFramework、SpringBoot、SpringCloud 三部曲,探究编写大型框架的奥秘。通过对优秀框架的研究,掌握高明的设计理念和编程技巧,对于自身技术能力的提升大有裨益。 ## 学习目标 本教程的学习计划分为三个阶段,首先是 Spring Framework,构建一个传统的 web 应用。其次,在 Spring Framework 的基础上,结合嵌入式 servlet 容器,构建 Spring Boot 应用。第三,以 Spring Boot 为基础,实现分布式的微服务体系。三个阶段环环相扣,通过逐步学习,对 Spring 框架的核心功能有全面而深入的理解。 ![](docs\image\学习路线.png) 第一阶段的目标是构建一个传统 web 应用,将项目打包成一个 war 包,然后置于 servlet 容器(比如 Tomcat)的工作目录下。当 servlet 容器启动时,运行 web 应用。本阶段我们将实现 Spring Framework 的六个模块,包括 beans、aop、context、tx、web、webmvc 等。 第二阶段的目标是构建一个 Spring Boot 应用,最大的特点是将 servlet 容器嵌入到 web 应用中,实现开箱即用、约定大于配置等特性。本阶段我们将实现 Spring Boot 的四个模块,包括 tomcat-embed、mybatis、boot、boot-autoconfigure 等。其中 tomcat-embed 是嵌入式 servlet 容器,mybatis 是流行的 ORM 框架。它们都是第三方框架,属于选学部分。 第三阶段的目标是构建一组基于 Spring Boot 应用的微服务体系,包括注册中心、网关服务、业务服务(business service)等经典角色,实现服务治理、负载均衡、断路保护、高可用等分布式环境下的功能。本阶段我们将实现 Spring Cloud 的五大组件,包括 Eureka、Ribbon、Hystrix、Feign、Zuul 等,构建一个完整的微服务体系。 ## 第一阶段目标 在第一阶段,我们的目标是实现 Spring Framework 六个模块,各模块之间的依赖关系如下所示。首先,我们需要依赖 Spring 核心包,作为整个项目的基石。然后是 beans 和 aop 模块,它们提供核心的 IOC 和 AOP 功能。接下来是 context 模块,作为门面与用户(包括其他模块)打交道,比如大名鼎鼎的 `ApplicationContext` 就属于 context 模块。 ![](docs\image\第一阶段目标.png) 接下来出现了两个分支,它们是 Spring Framework 的两个应用方向,通常会结合起来使用。在一个典型的 web 应用中,至少要引入 webmvc 和 jdbc 模块,然后通过依赖关系引入其他模块。 - tx 和 jdbc 模块是为访问数据库提供服务的,由于 jdbc 模块的代码较少,我们将其归入了 tx 模块中。 - web 模块提供了 web 应用的基础组件,比如 `WebApplicationContext` 表示运行在 web 环境中的 Spring 容器。理论上我们可以利用这些组件构建 web 应用,实际上很难直接使用。 - webmvc 模块引入了 MVC 架构,极大地提高了 web 应用的开发效率。事实上,构建 web 应用可以选择其他 MVC 架构,比如以前比较流行的 Struts2 框架。 ## 关于作者 我是 Stimd,主要从事互联网 Java 后端开发。专注编程技术,广泛涉猎Java、C#、Python、前端、安卓、鸿蒙、大数据、中间件等领域。分享心得体会,持续输出干货。 扫码关注公众号【Java编程探微】,查看本系列的教程文章。欢迎交流,共同进步。 ![](docs\image\gzh_qrcode.jpg) - 项目地址:https://gitee.com/stimd/spring-wheel - 博客:https://juejin.cn/user/1416633465203416