写在开始:这个系列会陆续更新我学习Spring源码的一些笔记与自己的理解,由于本人水平有限,难免对有些知识理解不到位,亦或者手误导致文中有不正确的地方,欢迎各位指正与探讨。
本文将自己学习源码之前的一些准备工作与环境搭建过程记录于此。
0.版本信息
Idea:2020.1(Mac)+JDK1.8+Gradle-5.6.4+Spring 5.2.x
版本对应很重要,务必相对应
1.源码获取
从Github上拉取源码,clone网速慢的可以自行将Github上的源码导入至自己的Gitee中然后拉取切换分支到5.2.x,这里不做过多赘述。
Github源码地址:[https://github.com/spring-projects/spring-framework]
2.查看导入文档
在拉取的Spring的源码中找到import-into-idea.md
文件打开,作者已注明安装的步骤。
Steps:
// 使用gradle对oxm进行编译
- Precompile
spring-oxm
with./gradlew :spring-oxm:compileTestJava
// 在idea中导入- Import into IntelliJ (File -> New -> Project from Existing Sources -> Navigate to directory -> Select build.gradle)
// 对spring-aspects模块进行排除- When prompted exclude the
spring-aspects
module (or after the import via File-> Project Structure -> Modules)- Code away
3.安装Gradle
由于Spring项目不是用maven构建而是用gradle构建的,所以我们先得安装gradle
-
查看Spring项目默认支持的gradle版本号
在项目根目录下:gradle->wrapper->gradle-wrapper.properties打开该文件找到gradle的版本信息
-
下载gradle
找到对应版本,点击下载。
-
安装gradle
将下载下来的zip包解压到固定目录下 ,解压后目录结构如下
-
配置环境变量
在
~/.bash_profile
中加入以下变量,添加完成后记得重新加载配置文件(source ~/.bash_profile)windows用户可自行查询添加环境变量的方法(和Java配置环境变量类似)
# gradle # GRADLE_HOME=下载后的解压目录 GRADLE_HOME=/Users/lfh/work/developer/tools/gradle-5.6.4; export GRADLE_HOME export PATH=$PATH:$GRADLE_HOME/bin # GRADLE_USER_HOME:GRADLE的仓库名称(相当于maven仓库),变量名称必须为此,不能改变,目录路径可自定义 GRADLE_USER_HOME=/Users/lfh/work/developer/tools/gradle_repository export GRADLE_USER_HOME
-
查看版本信息
使用命令行
gradle -version
,当看到以下信息就证明配置成功。 -
修改依赖仓库下载地址
由于默认仓库在境外下载依赖较慢,所以我们在gradle解压目录下新建init.gradle文件并添加阿里仓库地址,会根据配置的仓库地址以此进行寻找。
mavenLocal():使用本地maven仓库
mavenCentral():使用gradle中心仓库
allprojects { repositories { mavenLocal() maven { name "Alibaba" ; url "https://maven.aliyun.com/repository/public" } maven { name "Bstek" ; url "https://nexus.bsdn.org/content/groups/public/" } mavenCentral() } buildscript { repositories { maven { name "Alibaba" ; url 'https://maven.aliyun.com/repository/public' } maven { name "Bstek" ; url 'https://nexus.bsdn.org/content/groups/public/' } maven { name "M2" ; url 'https://plugins.gradle.org/m2/' } } } }
4.编译
切换到Spring项目根目录下,使用命令进行编译。编译时间有点漫长,耐心等待。如果出现编译失败的情况,可多尝试几遍。
win下的命令:gradlew :spring-oxm:compileTestJava
mac下的命令:./gradlew :spring-oxm:compileTestJava
编译中:
编译成功:
5.导入Idea
File -> New -> Project from Existing Sources -> build.gradle
导入过程依旧漫长,耐心等待......
导入成功:
配置项目:
6.排除非必要模块spring-aspects
When prompted exclude the
spring-aspects
module (or after the import via File-> Project Structure -> Modules)
根据官方描述需要排除spring-aspects模块,或者可自行下载导入spring-aspects模块,5.2.x版本的源码已经有spring-aspects模块,可跳过此步骤。别的版本如需排除,可自行查询排除方法。
7.新建模块进行测试
项目右键->new->Moudle
- 新建Moudle:spring-demo
- 在build.gradle中添加依赖
dependencies {
compile(project(":spring-context"))
compile(project(":spring-beans"))
compile(project(":spring-core"))
testCompile group: 'junit', name: 'junit', version: '4.12'
}
- 新建类:src->main->java->HelloWord
public class HelloWorld {
private String str = "hello,World!";
public String getStr() {
return str;
}
}
- 新建配置文件:src->main->resources->spring-config.xml
<?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 id="helloWorld" class="com.atlfh.HelloWorld"/>
</beans>
- 新建测试类:src->test->java->MyBeanTest
@Test
public void test(){
//FileSystemXmlApplicationContext sc = new FileSystemXmlApplicationContext("classpath:spring-config.xml");
//FileSystemXmlApplicationContext sc = new FileSystemXmlApplicationContext("src/main/resources/spring-config.xml");
ClassPathXmlApplicationContext sc = new ClassPathXmlApplicationContext("spring-config.xml");
HelloWorld helloWorld = (HelloWorld)sc.getBean("helloWorld");
String str = helloWorld.getStr();
System.out.println(str);
}
- 启动测试成功