一、Java 开发工程师为什么一定要阅读 Srping 源码?
作为一个三到五年这种上升期的 Java 开发工程师,不能要求说熟知 Spring 的底层原理,但是最起码要做到一些核心知识点的源码翻阅工作,无论是面试还是在工作使用过程中都会对自己理解这个优秀的框架起到关键性的作用。鉴于目前主流的编辑器是 IntelliJ IDEA,所以老四来写一下如何在 IntelliJ IDEA 中导入 Spring Framework 源码以便于我们在自己的工作空间下阅读 Spring 源码,而且我们可以随意的修改代码,在重要的方法中甚至整个 Spring 体系都加上自己的中文注释,帮助我们更好的理解 Srping 的底层原理。
二、导入 Spring 源码需要的开发环境
- IntelliJ IDEA 2019.3.3 (Ultimate Edition)
- JDK 1.8 或者 JDK 11
- GitHub 或者码云
开发环境只是给你做个参考,截止发文之前,老四用的是最新版本的 idea,不过你用 idea 2019.2 的相关版本也未尝不可,包括 Java 版本的选择,建议 8 以上都可以。Spring 作为开源项目,放在 GitHub 上进行源码的版本管理,不过由于项目时间较长,提及较大,很多人直接从 GitHub 上克隆经常会遇到麻烦,下载源码失败,遇到这种情况可以使用国内的码云源码版本管理平台,那上面有 Spring 的源码实时镜像,可以帮助我们加速克隆,解决网络问题。
当然,以下教程老四直接使用下载对应版本源码压缩包,然后导入工作空间的方式,源码对于我们个人来讲是选择某一个相对稳定的版本对其进行阅读和注释,所以没必要对远端的项目进行关联。从版本管理地址导入工程的方式老四不会写。
三、Spring 源码地址及版本下载
截止发文前,老四选择的是 5.1.X 分支,然后直接下载对应版本的源码包,下载后的源码我们直接解压即可。码云下载的方式同理,不截图了。
由于 Spring 是使用 Gradle 进行项目管理和自动构建的,可能大多数 Java 开发工程师接触较多的都是 Maven,Gradle 与 Maven 一样都是源码构建工具,导入 idea 之前,我们需要在源码解压之后修改一下 Gradle 国内阿里云仓库的镜像地址以便于加速下载依赖。
打开「build.gradle」文件,分别在第三行和第 151 行配置如下的镜像地址:
1 2 3 4 5 |
repositories { maven { url "https://maven.aliyun.com/repository/spring-plugin" } maven { url "https://maven.aliyun.com/nexus/content/repositories/spring-plugin" } maven { url "https://repo.spring.io/plugins-release" } } |
1 2 3 4 5 |
repositories { maven { url "https://maven.aliyun.com/repository/central" } maven { url "https://repo.spring.io/libs-release" } mavenLocal() } |
四、下载 Gradle 并在 idea 中配置相关路径
下载最新二进制包即可,然后解压,复制 Gradle 的路径到 idea 的 Gradle 编译设置中。
五、idea 导入 spring-framework-5.1.x 源码
由于 idea 强大的功能,我们只需要打开 Srping 源码目录即可,idea 会自动识别为 Gradle 项目并开始帮助你建立索引,下载依赖,自动编译等。所以我们直接打开项目即可。
idea -> File -> Open…
打开之后,针对 Spring 项目,Gradle 会多出来一部分配置,这个时候我们需要勾选 Gradle 自动引入,否则可能会出现编译报错的问题。
六、编译 spring-core、spring-context 模块
项目引入之后,在 idea 右侧的菜单栏,有 Gradle 管理 Spring 项目各模块的编译运行配置,首先我们进行 spring-core 模块的编译。
接下来,运行 spring-context 的单元测试包。
注意:运行的过程中可能会报错,各个测试模块之间可能都会抛出一些红色异常警告,不过没关系,你会看到最后日志提示 build success,代表测试编译成功。
七、新建自定义模块对 Spring 项目进行测试
右键 -> New -> Module…
新建自定义模块之后,我们对 Spring 的项目进行一下简单的测试,看看我们能否顺利的运行起来整个项目。我建立的模块名字叫做「spring-glorze」,在这个模块中我们首先编辑一下「build.gradle」文件,将 spring-context 模块编译引入。
然后,测试的逻辑就是配置一个 bean、组件扫描,最后测试一下我们是否可以在 ApplicationContext 中获取到我们建立的 bean 即可。代码如下:
配置组件扫描
1 2 3 4 5 6 7 8 9 10 11 12 13 |
package com.glorze; import org.springframework.context.annotation.ComponentScan; /** * 组件扫描,扫描当前包所有类 * @author: Glorze * @since: 2020/2/18 18:15 */ @ComponentScan(basePackages = "com.glorze.**") public class CompentScan { } |
配置一个自定义 bean
1 2 3 4 5 6 7 8 9 10 11 12 13 |
package com.glorze; import org.springframework.stereotype.Component; /** * 自定义 bean * @author: Glorze * @since: 2020/2/18 18:17 */ @Component public class Bean { } |
测试获取自定义 bean
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
package com.glorze; import org.springframework.context.annotation.AnnotationConfigApplicationContext; import org.springframework.context.annotation.Bean; /** * 测试 Spring 中获取自定义 bean * @author: Glorze * @since: 2020/2/18 18:19 */ public class Test { public static void main(String[] args) { AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(CompentScan.class); Bean bean = context.getBean(Bean.class); System.out.println(bean); } } |
八、Spring 源码专业书籍推荐
至于如何阅读 Spring 源码,老四这里推荐郝佳的《Spring源码深度解析 第2版》,可以自行前往京东上面去了解一下,看完那本书几本也就掌握了 Spring 底层原理是怎么实现的,顺便帮你巩固 Spring 的一些核心知识。文末可以自助获取这本书的 pdf 电子版。
九、本文相关文章阅读
- 阿里巴巴Java开发手册第三章-单元测试篇
- 随手分享一下国内开源软件镜像站点 持续更新
- 可能是全网最全最基础最实用的 IntelliJ IDEA 的配置手册和基础使用教程 吐血整理
- 《Spring 系列》
更博不易,如果觉得文章对你有帮助并且有能力的老铁烦请捐赠盒烟钱,点我去赞助。或者扫描文章下面的微信/支付宝二维码打赏任意金额(点击「给你买杜蕾斯」),也可扫描小站放的支付宝领红包二维码,线下支付享受优惠的同时老四也可以获得对应赏金,老四这里抱拳谢谢诸位了。捐赠时请备注姓名或者昵称,因为您的署名会出现在赞赏列表页面,您的捐赠钱财也会被用于小站的服务器运维上面,再次抱拳感谢。
资源下载
隐藏内容:******,购买后可见!
下载价格:0 G币
您需要先登录后,才能购买资源
欢迎访问高老四博客(glorze.com),本站技术文章代码均为老四亲自编写或者借鉴整合,其余资源多为网络收集,如涉及版权问题请与站长联系。如非特殊说明,本站所有资源解压密码均为:glorze.com。