前置环境
- git version 2.28.0.windows.1
- java version 11.0.1
- gradle 8.0.2
- idea 2022.2.1
- windows 11 家庭版
下载源码
两种方案,直接下载压缩包,或者使用git获取代码,下面是spring在github的代码地址
GitHub - spring-projects/spring-framework: Spring Framework
下载压缩包,先将左侧的版本选择为5.3.x,然后直接选择code -> download ZIP,下载后解压即可
使用git获取代码先保证机器有git环境,打开idea选择右侧的GET from VSC
URL地址栏输入https://github.com/spring-projects/spring-framework.git
,点击Clone等待下载完成
下载完成打开直接关闭idea对项目的加载,将版本调为5.3.x
编译源码
打开根目录下的import-into-idea.md
文件,找到文件中的gradlew :spring-oxm:compileTestJava
命令
使用管理员权限打开命令行窗口,移动目录到源码的根目录,执行在上述文件中刚找到的命令
如果没有报错那么恭喜编译spring源码已经完成了50%了,很遗憾的是根据环境的不同和网络的不同这个操作会产生很多意料外的错误。后续会把我在编译过程中的错误和解决方案放出来。
这里如果遇到网络错误,可以尝试科学上网然后重新执行,也可以多执行几次也是有可能成功的。
打开idea打开右侧的grade窗口点击刷新按钮,即可开始加载所有包的依赖,这一过程中不出意外的话会出现很多意外,后面会把我遇到过的问题整理发出,如果这一步还没出现问题,那么编译基本已经完成
最后一步需要排除掉spring-aspects项目,构建项目时存在这个项目会报错,直接右键选择Load/Unload Modules...
将spring-aspects包放置到右侧即可
编写测试类-小试牛刀
在spring-test工程下的test目录建立一个自己的包,新建UserMessage类
public class UserMessage {
private String name;
private Integer age;
private List<String> todos;
// 忽略 get/set toString ...
}
在resource目录下建立ApplicationContext.xml配置文件,新增一个bean
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean name="jelly" class="top.byfree.jbyan.bean.UserMessage">
<property name="name" value="jelly"/>
<property name="age" value="18"/>
<property name="todos">
<list>
<value>吃饭</value>
<value>睡觉</value>
<value>打豆豆</value>
</list>
</property>
</bean>
</beans>
编写测试类TestUserMessage,执行测试类查看结果
public class TestUserMessage {
@Test
public void TestDemo01() {
ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("ApplicationContext.xml");
UserMessage jelly = applicationContext.getBean(UserMessage.class);
System.out.println(jelly);
}
}
成功返回UserMessage信息,测试成功