spring-framework源码阅读环境搭建

2,005 阅读2分钟

一、依赖工具

  1. JDK11.0.6
  2. gradle7.2(gradle-wrapper.properties目录下可以指定下载版本)
  3. idea2021.1.3
  4. spring-framework5.3.x


二、下载源码

下载源码方法

  • 有梯子直接从github上拉取
  • 没有梯子,可以从github上fork到自己仓库,然后导出到gitee上从gitee上下载


github地址:github.com/spring-proj…

配置gradle版本,以及加速下载

  1. spring5.3.x默认gradle版本是7.2,可以在 gradle/wrapper/gradle-wrapper.properties 下修改gradle版本,一定要大于7.0否则加载组件会失败
  2. 在spring-framework目录下build.gradle文件添加阿里云加速
repositories { 
maven { url 'http://maven.aliyun.com/nexus/content/groups/public'
allowInsecureProtocol = true }<br>
mavenCentral()
maven { url "https://repo.spring.io/libs-spring-framework-build"
allowInsecureProtocol = true }<br>
}
  1. 关于spring5.3.x使用kotlin静态类型编程语言编写代码,可以把idea中kotlin升级到最新版,并且修改项目中配置

image.png
我这是已经升级到最新版,没有升级会出现一个升级按钮,点击就会自动升级了
升级完成后,全局搜索**kotlin.jvm 和 kotlin-bom **修改对应升级版本就可以了

image.png
image.png
然后刷新gradle就能加载成功了

三、编译

前期准备工作完成后,可以开始编译了
编译前需要把项目JDK版本调整到11
image.png
选择idea,最左边Gradle->spring-oxm->other->compileTestJava双击编译
image.png
因为编译使用到的是JDK11,会出现一个错误
image.png
这是因为我们使用的JDK是11,而 **isAccessible() **这个方法在jdk9时弃用了,导致编译失败,可以看下面这个例子就明白了了

`@Test
public void testConstructor() throws NoSuchMethodException, IllegalAccessException, InstantiationException, InvocationTargetException {
Class clazz = Person.class;
//1.获取指定的构造器:
Constructor con1 = clazz.getDeclaredConstructor(String.class);
//2.保证此构造器是可访问的:
con1.setAccessible(true);
//3.调用此构造器创建运行时类的对象(两种方法):
//方法一:jdk8以及8之前
//Person p1= (Person)clazz.newInstance();
//方法二:jdk9以及9之后:
Person p2 =(Person)con1.newInstance("Tom");
System.out.println(p2);
}

所以先把 method.isAccessible() 这个方法删除就可以正常编译了

四、源码测试

右键spring-framework->New->Module...,选择Gradle->Java->创建spring-samples模块
image.png
image.png
image.png

在spring-samples目录下,找到build.gradle 添加:

dependencies {
implementation(project(":spring-beans"))
implementation(project(":spring-context"))
testImplementation 'org.junit.jupiter:junit-jupiter-api:5.7.0'
testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.7.0'
}


再创建一个测试类,编写demo能正常运行,说明源码搭建成功!
image.png
image.png

感谢,阅读!

参考:
juejin.cn/post/706671…