1.开发环境
JDK8
IntelliJ IDEA 2019.1.4
gradle 5.6.4
git 2.33.0
2.操作步骤
下载并安装git
- 进入https://git-scm.com/downloads,下载对应操作系统的git版本
- 一直点击next安装即可
- 记得配置环境变量
获取Spring源码
-
使用clone的方式将源码拉取到本地,方便使用IDEA直接比较版本间的差异
- 新建一个文件夹
SpringFrameWork
- 在该文件夹下打开
git bash
,输入以下命令:
git clone https://github.com/spring-projects/spring-framework.git
- 完成克隆后,在命令行输入:
git checkout origin/5.2.x
- 新建一个文件夹
-
也可直接下载源码的压缩包
- 进入https://github.com/spring-projects/spring-framework,并选择其中一个版本
- 点击
code
中的Download ZIP
添加阿里云镜像
- 找到源码目录下的
build.gradle
文件
- 向文件中的
repositories
节点下添加以下镜像:
maven { url "http://maven.aliyun.com/nexus/content/groups/public" }
预编译spring-oxm模块
- 在源码目录下下打开cmd命令窗口
- 执行以下命令:
gradlew :spring-oxm:compileTestJava
- 完成
spring-oxm
模块的编译后,会在源码目录生成.gradle
文件夹
下载并安装gradle
- 从
.gradle
文件夹可以查看到需要下载的版本,进入https://gradle.org/releases/,下载需要的版本
-
记得配置环境变量:
- 新增
GRADLE_HOME
环境变量,指向gradle-5.6.4-bin.zip
解压目录 - 在Path环境变量新增
%GRADLE_HOME%\bin
- 新增
-
在cmd中输入以下命令
gradle -v
检查是否安装成功
为Gradle配置镜像
- 进入
gradle-5.6.4-bin.zip
解压后的目录,在init.d
目录下新建init.gradle
文件 - 添加以下内容:
allprojects{
repositories {
def REPOSITORY_URL = 'http://maven.aliyun.com/nexus/content/groups/public/'
all { ArtifactRepository repo ->
def url = repo.url.toString()
if ((repo instanceof MavenArtifactRepository) && (url.startsWith('https://repo1.maven.org/maven2') || url.startsWith('https://jcenter.bintray.com'))) {
project.logger.lifecycle 'Repository ${repo.url} replaced by $REPOSITORY_URL .'
remove repo
}
}
maven {
url REPOSITORY_URL
}
}
}
将代码导入到IDEA中
-
选择IDEA的
Import Project
-
选择导入
Gradle
项目(先确保在IDEA中已经开启Gradle
插件,要不然下图不会显示Gradle
)
- 在导入前进行配置
-
点击
Finish
,等待IDEA构建完项目 -
将分支切换到
5.2.x
构建整个项目
- 在IDEA中选择
Build->Build Project
(本机在构建过程很顺利,但是在测试时还是报了关于AspectJ
的错误,所以还是要进行下面的步骤)
-
下载并安装
aspectj
:- 在
aspectj-1.9.5.jar
所在的文件夹打开cmd命令行,运行java -jar aspectj-1.9.4.jar
- 在安装界面中点击
Next
(注意自定义aspectj-1.9.5.jar
安装的路径并选择JDK所在的路径)
- 在
-
IDEA中配置
aspectj
:- 确保插件
Spring AOP/@AspectJ
和AspectJ Support
已被激活
- 将编译器改为
Ajc
-
指定需要使用
Ajc
编译的项目
- 确保插件
-
再次选择
Build->Build Project
3.测试
创建模块
添加必要的依赖
compile(project(":spring-context"))
compile(project(":spring-beans"))
compile(project(":spring-core"))
compile(project(":spring-aop"))
optional("org.aspectj:aspectjweaver")
编写测试代码
// 下面代码都是自定义模块中的
// 实体类User
public class User {
private Integer id;
private String userName;
// 下面就是setter、getter、toString和构造器,此处省略
}
// 注解的方式声明bean
@Configuration
@Component
public class JavaConfig {
@Bean
public User user(){
return new User(1, "psj");
}
}
// 测试类
public class Test {
public static void main(String[] args) {
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(JavaConfig.class);
User user = (User) context.getBean("user");
System.out.println(user.toString()); // 可以成功输出就OK了!!!
}
}
4.参考
https://daimingzhi.blog.csdn.net/article/details/107101967
https://www.bilibili.com/video/BV1w94y197DT/