目录
安装 gradle
导入 Spring 源码
创建测试模块 my-test
本文思维导图
本文将粗略的搭建一个 Spring 源码的阅读环境, 为后面的源码阅读做一个准备. 做任何事情不管是有一个完美的或者是不太完美的开头, 只要去做了, 那么就是一种胜利.
由于 spring 使用了 gradle 构建工具, 接下来先安装 gradle.
安装 gradle
从 Gradle 官网下载 gradle 安装包, 打开 https://gradle.org/releases/
将下载的安装包 gradle-x.x.x-all.zip 解压到当前目录
环境变量配置
配置 GRADLE_HOME
配置 Path
打开目录行工具, 输入 gradle -v, 能看到 gradle 的版本信息表示安装已经成功
导入 Spring 源码
Spring 在 GitHub 上的仓库地址是:, 本文不会直接去 GitHub 上去下载源码, 网速实在太慢. 本文使用的码云上 Spring 仓库的镜像, 该镜像每日同步一次, 地址是 https://gitee.com/mirrors/Spring-Framework
从 Git 导入项目
填写要克隆的 Git 仓库信息, 可以点击右边的 [Test] 按钮测试, 等待仓库克隆完成
输入的 URL 地址: https://gitee.com/mirrors/Spring-Framework.git
打开导入的 Spring 项目
从 gradle 导入 Spring 项目, 等待 gradle build 完成
注意:
上面使用的是本地自己安装的 gradle.
idea 中 gradle 默认的服务目录路径是用户目录下的. gradle 目录, 对于 Administrator 用户, 对应的目录是
C:\Users\Administrator\.gradle
. 该目录占用的空间一般比较多, 所以在这里将这个目录放到其他的盘中.
构建完成后报错如下 (只列出了一部分):
- ...
- Error:(63, 30) java: cannot find symbol
- symbol: class Signature
- location: class org.springframework.cglib.core.KeyFactory
- ...
- location: class org.springframework.cglib.proxy.Enhancer
- Error:(152, 30) java: cannot find symbol
- ...
spring 未了避免与 cglib 和 objenesis 冲突, 将 cglib 和 objenesis 相关的包重新 repack 到 org.springframework.cglib 和 org.springframework.objenesis 包中, 这部分的代码没有包含到源码当中. 构建之前, 可以通过添加 Gradle 任务来解决, 见: 和 https://youtrack.jetbrains.com/issue/IDEA-160605
解决办法如下:
在 idea 中打开 Gradle 面板
在右侧的 Gradle 面板 Spring -> Tasks -> other -> cglibRepackJar
激活任务
选择要激活的 cglibRepackJar 任务
重新构建项目 (花费的时间较长)
创建测试模块 my-test
为了方便编写测试 spring 的代码, 在 spring-framework 单独新建一个模块 my-test
右键 spring-framework 项目 ->New->Module...
输入 ArtifactId: my-test
一路下一步, 最好点击完成, 新的模块就建好了
添加依赖:
API(project(":spring-context"))
为了能让 my-test 自动导入相关的依赖, 在 Gradle 面板中右键 spring 节点
在 my-test 模块中编写程序测试
创建 MyApplication
- package com.zfx;
- import org.springframework.context.ApplicationContext;
- import org.springframework.context.support.ClassPathXmlApplicationContext;
- public class MyApplication {
- public static void main(String[] args) {
- ApplicationContext ac = new ClassPathXmlApplicationContext("classpath:applicationContext.xml");
- Hello hello = (Hello)ac.getBean("hello");
- hello.sayHello();
- }
- }
在 resources 目录下新建 applicationContext.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="hello" class="com.zfx.Hello"></bean>
- </beans>
新建 Hello 类
- package com.zfx;
- public class Hello {
- public void sayHello() {
- System.out.println("Hello, zhangfengxian");
- }
- }
运行 MyApplication, 可以看到控制台输出: Hello, zhangfengxian
至此整个环境算是搭建好了
本文思维导图
来源: https://www.cnblogs.com/zhangfengxian/p/11072500.html