spring-framework源码阅读环境搭建

一、依赖工具

  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 **{<br /> **maven**{ **url 'http://maven.aliyun.com/nexus/content/groups/public'<br /> allowInsecureProtocol = true**}<br /> **mavenCentral()<br /> maven **{ **url "https://repo.spring.io/libs-spring-framework-build"<br /> 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 ](/Test ) <br />public void testConstructor() throws NoSuchMethodException, IllegalAccessException, InstantiationException, InvocationTargetException {<br />Class clazz = Person.class;<br />[//1.获取指定的构造器](//1.xn--tors3d8xgi7igyfj7zy9ulww):<br />Constructor con1 = clazz.getDeclaredConstructor(String.class);<br />[//2.保证此构造器是可访问的](//2.xn--ruq02hi9bvt0axrbb9jzxvj02bma603if6p):<br />con1.setAccessible(true);<br />[//3.调用此构造器创建运行时类的对象](//3.xn--5brr8hg1f4pdpylemcnskozvxzcjqvxu4a4kji9ap63ag8a)(两种方法):<br />//方法一:jdk8以及8之前<br />//Person p1= (Person)clazz.newInstance();<br />//方法二:jdk9以及9之后:<br />Person p2 =(Person)con1.newInstance("Tom");<br />System.out.println(p2);<br />}

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

四、源码测试

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

在spring-samples目录下,找到build.gradle 添加:
dependencies **{<br /> **implementation(project(":spring-beans"))<br /> implementation(project(":spring-context"))<br /> testImplementation 'org.junit.jupiter:junit-jupiter-api:5.7.0'<br /> testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.7.0'<br />**}**
再创建一个测试类,编写demo能正常运行,说明源码搭建成功!
image.png
image.png

感谢,阅读!

参考:
juejin.cn/post/706671…

Supongo que te gusta

Origin juejin.im/post/7067356755893682189
Recomendado
Clasificación