目录
环境计划
1.安装git
2.jdk版本1.8
3、Gradle目前不需要安装,按照源码提示即可,编译时按照Gradle对应版本即可
4.IDEA,我使用的版本是IDEA2020.3.1
1.获取Spring源码
推荐使用clone的形式将源码拉取到本地。 有用之处在于可以借助IDEA直接比较版本之间的差异
在c盘空间新建一个文件夹,比如SpringFramWork,单步进入SpringFramWork文件夹,键盘右键,选择gitbashhere,打开git命令行,输入以下命令,拉取spring源码
git clone https://github.com/spring-projects/spring-framework.git
等待仓库被克隆。 这个过程可能需要很长时间。 如果不行,可以去GitHub官网或者码云直接下载源码的压缩包。
官网下载(下载太慢):
码云下载:
如果你像我一样直接通过命令拉取代码,记得切换到5.2.x版本下载源码编译,在git命令行执行命令:
git checkout origin/5.2.x
2.添加阿里云镜像
在编译过程中,Spring会手动下载一些依赖包。 默认使用官方镜像,下载比较慢,所以我们提前添加国外镜像,将下面这行代码粘贴到刚才下的build.gradle文件中的repositories节点中,
//添加阿里云镜像
maven { url "http://maven.aliyun.com/nexus/content/groups/public" }
3.预编译spring-oxm模块
打开Windows命令提示符窗口,切换到源码所在文件夹,例如:E:softwareSpringFramWorkspring-framework,执行以下命令
gradlew :spring-oxm:compileTestJava
这里等待的时间比较长下载源码编译,我的是20分钟,当出现BUILDSUCCESS字样时就表示构建成功
4.根据编译好的源码下载并安装对应版本的Gradle
编译spring-oxm模块后,会在当前spring-framework目录下生成一个.gradle文件夹,打开后可以查看对应的Gradle版本。 双击打开.gradle文件夹可以看到对应需要的gradle的版本号,直接从下面的网站下载对应需要的版本即可:选择binary-only
5、下载安装后,配置Gradle的环境变量
添加GRADLE_HOME环境变量指向Gradle解压目录。 配置Path环境变量:添加%GRADLE_HOME%bin
然后测试是否安装成功,在命令行输入如下命令:gradle -v,查看是否正确输出对应的版本。
6.为已安装的Gradle配置外部镜像
进入Gradle安装目录,在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
}
}
}
7.导出代码到IDEA
打开IDEA选择打开项目,选择当前的spring-framework目录,点击Finish,等待IDEA构建项目。 如果你已经按照我的方法配置了Gradle的外部镜像,这个过程不会花费太长时间。 我们只花了10多分钟就搭建完成
如果你像我一样直接查看代码,记得在IDEA上将git分支切换到5.2.x
如果右下角没有出现git分支,右键右下角那一栏,查看gitbranch
git分支出现后,左键点击键盘弹出选择列表,选择5.2.x
8. 构建整个项目
选择“构建”>“构建项目”
9.添加测试模块
右键项目名称—>新建—>模块,选择Gradle和Java,输入模块名称,点击下一步—>完成,完成测试模块的创建
最后添加一些必要的依赖,更改创建的模块中的build.gradle文件,添加以下三个依赖
compile(project(":spring-aop"))
compile(project(":spring-context"))
optional("org.aspectj:aspectjweaver")
10.添加访问模块源代码的入口
在新模块的java目录下添加一个包com.gxb.service,并在该包下添加一个服务类
package com.gxb.service;
public interface WelcomeService {
String sayHello(String name);
}
在com.gxb.service包下添加impl包,并在该包下添加service实现类
package com.gxb.service.impl;
import com.gxb.service.WelcomeService;
public class WelcomeServiceImpl implements WelcomeService {
@Override
public String sayHello(String name) {
System.out.println("welcome " + name);
return "return success!";
}
}
在com.gxb包下创建一个类,并编译一个入口函数
package com.gxb;
import com.gxb.service.WelcomeService;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Entrance {
public static void main(String[] args) {
System.out.println("hello spring");
String classPath = "spring/spring-config.xml";
ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext(classPath);
WelcomeService welcomeService = (WelcomeService) applicationContext.getBean("welcomeService");
System.out.println(welcomeService.sayHello("gxb"));
}
}
在resource下添加一个文件夹spring,并在spring文件夹下添加一个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="welcomeService" class="com.gxb.service.impl.WelcomeServiceImpl">
</bean>
</beans>
以debug模式运行main函数,程序启动成功
参考官方文档: