Spring源码分析(一)-Spring源码编译

1 下载源码

1.1 fork源码

由于从github网络下载太慢,就直接在gitee下载了gitee源码镜像,fork主要是为了可以添加注释

Spring源码分析(一)-Spring源码编译

2.2 下载源码

将fork的源码clone到本地

git clone https://gitee.com/Yezi-up/Spring-Framework.git

2.3 切换分支

因为本次查看的源码是基于5.2,所以先切换分支再导入到idea

git checkout -b 5.2.x origin/5.2.x

2 导入到IDEA中

2.1 直接通过IDEA导入项目

第一次打开大概需要15-20分钟

Spring源码分析(一)-Spring源码编译

2.2 查看当前的版本

gradle.properties 中查看,我们编译的版本为 5.2.19.BUILD-SNAPSHOT

version=5.2.19.BUILD-SNAPSHOT
org.gradle.jvmargs=-Xmx1536M
org.gradle.caching=true
org.gradle.parallel=true

3 使用源码并调试

最好还是不要修改了,碰到各种问题。。。。
可以先修改项目的编译和运行方式,默认是 Gradle,使用这种方式可以直接运行 3.1 中的例子,如果换为 IntelliJ IDEA则会碰到一些问题,在 3.2 中是解决方式。
但是换成 IntelliJ IDEA执行时会快很多

Spring源码分析(一)-Spring源码编译

3.1 创建使用源码的应用

3.1.1 创建model为spring-example,并且添加spring-context引用

plugins {
    id 'java'
}

group 'org.springframework'
version '5.2.19.BUILD-SNAPSHOT'

repositories {
    mavenCentral()
}

dependencies {
    testImplementation 'org.junit.jupiter:junit-jupiter-api:5.7.0'
    testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.7.0'
    compile(project(":spring-context")) // 添加spring的依赖
}

test {
    useJUnitPlatform()
}

3.1.2 注入容器中的bean

public class Student {

    public String name = "zhangsan";

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                '}';
    }
}

3.1.3 将Student注册到ioc容器,并从容器中取出bean

public class Test {

    public static void main(String[] args) {
        // 实例化 ioc容器
        AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext();
        applicationContext.register(Student.class);
        // 初始化 容器
        applicationContext.refresh();
        System.out.println(applicationContext.getBean(Student.class));
    }
}

3.1.4 执行结果

  1. 使用gradle编译执行,需要3秒多

Spring源码分析(一)-Spring源码编译
  1. 使用Idea编译执行,基本秒级,第一次会慢点😂

Spring源码分析(一)-Spring源码编译

3.2 执行时碰到的问题(只有编译和运行方式换为 IntelliJ IDEA 会遇到)

  1. Kotlin: Language version 1.3 is no longer supported; please, use version 1.4 or greater.

由于对应的模块的Kotlin版本太低,升级对应模块的kotlin版本,看第二张图

Spring源码分析(一)-Spring源码编译

Spring源码分析(一)-Spring源码编译
  1. 找不到变量符号 CoroutinesUtils,因为未编译,导致找不到指定的类,类似的都可以按如下方式处理

找到对应的module,执行下test,这样会重新编译 看第二张图,执行单元测试会主动编译

Spring源码分析(一)-Spring源码编译

Spring源码分析(一)-Spring源码编译

Original: https://www.cnblogs.com/cnsure/p/15676755.html
Author: 观书喜夜长
Title: Spring源码分析(一)-Spring源码编译

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/714325/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球