前言
提到源码,有种恐惧的感觉,不知道从哪开始看,该看哪些,怎么去看...
与其想这么多,先搭好源码环境,再对照B站的一些源码分析视频和spring源码分析书籍来学习。
准备环境
jdk:1.8
gradle:5.6.4
idea:2020.3.4
spring-framework:5.2.x
构建源码
前提:假设你的环境已配置完毕
导入源码:
File → new → Project form Existing Sources → spring源码home目录中build.gradle
6D090F54-308A-4995-B021-DBE56EA383F8.png
修改源码gradle配置:
-
由于gradle-5.6.4-bin.zip下载过慢,可将源码中gradle目录中wrapper/gradle-wrapper.properties中下载地址拿出来拷贝到浏览器手动下载下来,放个位置,再将gradle-wrapper.properties地址改为文件的位置,我这里就直接放在wrapper目录里
微信截图_20210529202838.png
微信截图_20210529202859.png
-
加快gradle下载速度,给build.gradle和settings.gradle配置上阿里云镜像地址
微信截图_20210529202735.png
maven { url 'http://maven.aliyun.com/nexus/content/groups/public/' }
maven { url 'http://maven.aliyun.com/nexus/content/repositories/jcenter' }
maven { url 'http://maven.aliyun.com/nexus/content/repositories/google' }
maven { url 'http://maven.aliyun.com/nexus/content/repositories/gradle-plugin' }
微信截图_20210529203046.png
maven { url 'http://maven.aliyun.com/nexus/content/groups/public/' }
maven { url 'http://maven.aliyun.com/nexus/content/repositories/jcenter' }
maven { url 'http://maven.aliyun.com/nexus/content/repositories/google' }
maven { url 'http://maven.aliyun.com/nexus/content/repositories/gradle-plugin' }
编译源码
- 以上工作完毕后,去spring源码目录下执行gradlew.bat文件,等待完成;
- 打开idea,点开右侧gradle找到主要的核心依赖包依次编译:spring-core、spring-beans、spring-context、spring-oxm(如需要其他功能,可编译对应的依赖包)
测试源码
编写个demo:
-
右键spring源码项目添加module,选择gradle项目
微信截图_20210529203913.png -
修改新建的module目录下build.gradle文件,引入spring几个核心包和自己需要的包,并点右上角旋转按钮reload依赖
微信截图_20210529215028.png 编写测试代码
public interface GoodsService {
void create();
}
@Component
public class GoodsServiceImpl implements GoodsService {
@Override
public void create() {
System.out.println("create one goods !");
}
}
public class Client {
public static void main(String[] args) {
AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext();
applicationContext.scan("com.hxs.learn.service");
// applicationContext.register(GoodsServiceImpl.class);
applicationContext.refresh();
GoodsService goodsService = applicationContext.getBean(GoodsService.class);
goodsService.create();
}
}
运行成功界面:
微信截图_20210529210037.png
注意点
- 下载的spring源码看看配置什么版本的gradle,和支持java的版本
踩个坑最新的main分支依赖spring源码,不支持jdk1.8。
- idea版本尽量新点
总结
折腾了半天,对照着网上的一些教程,才搭出环境并成功运行的demo。
首先不熟悉gradle只能copy网上的教程。
今天终于迈出第一步,即便搭建艰难,为了学习源码也是值得的!