一、下载源码
- https://github.com/spring-projects/
- 本次使用的源码 spring-framework-5.1.x
- Gradle-7.2-bin(也可以用源码文件中指定的版本)
- jdk 11 (jdk1.8以上即可)
- ide 2021.2.2(或 ide2019)
登录Spring官网,选择Spring-framework
- 直接下载zip压缩包,解压到本地即可,git clone 太慢
二、选择对应版本的gradle,下载gradle
- 打开 Gradle Distributions
https://services.gradle.org/distributions/选择最新版本:gradle-7.2-bin.zip(all版本是带源码的)
三、导入源码
->选中相应的源码文件
-> 选中 Gradle 因为Spring官网是用的 Gradle,这里保持一致
-> 修改 Gradle 配置
-> 导入Spring项目后,构建下,构建成功就ok,这里构建的时候报错:提示git命令非0退出, 但是构建成功了(这个版本为5.3.16)
-> 这个问题折腾了好久,后面又陆续下载了 5.3.x 版本,替换了各种版本的Gradle,还是不行,删除项目中的.git也不行,最后下载了 spring-framework-5.1.x 这个版本直接编译通过了。。
- 这个问题呢,项目构建提示是成功的,但是后面运行spring-context和spring-core时会直接编译失败
-> 重新下载源码的步骤略:
-> gradle目录下,.properties 文件有对应版本,可以根据指定版本进行gradle下载,这里不想重新搭建环境,就直接使用旧的Gradle
- gradle每次编译都会从官网下载指定版本(gradle-4.10.3-bin.zip),所以我们在它第一次下载完之后,将distributionUrl设置成本地文件,这样就不会每次编译都从官网下载了,本次这里未替换
- distributionUrl=file:///e:/dev_gradle/gradle-4.10.3-bin.zip(选择gradle的压缩包的全路径地址)
-> 构建成功之后,找到ApplicationContext
类
- 打开后,按下Ctrl+Alt+U键,如果出现下图所示类图界面说明构建成功了!(构建过程就是找依赖对象的过程)
四、编译源码
-> 编译源码前,可以查看 import-into-idea.md 文件
-> 文档要求先编译spring-oxm下的compileTestjava,这里我是直接编译spring-core
-> 编译 spring-context,源码下载下来没有class,需先编译一下
- spring-context依赖于 spring-core
-> 编译都通过后,创建自己的Module模块
->在应用中引入依赖,并构建下,如下
//添加完要构建一下,否则代码中无法引用
compile(project(":spring-context"))
compile(project(":spring-beans"))
compile(project(":spring-core"))
compile(project(":spring-aop"))
compile(project(":spring-instrument"))
-> 创建类对象 SysConfig
package config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import pojo.UserInfo;
@Configuration
//@ComponentScan
public class SysConfig {
//@Bean
//public UserInfo getUser(){
// return new UserInfo();
//}
}
-> 创建启动类
package controller;
import config.SysConfig;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
public class SysControllerTest {
public static void main(String args[]){
AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(SysConfig.class);
System.out.println(ac.getBean(SysConfig.class));
}
}
-> 启动测试,这里报了一个Kotlin 的错误,提示 Kotlin 版本过低 1.1 在build.gradle 中修改下版本并重新构建就ok
-> 最后编译运行结果如下