Spring 源码阅读环境搭建

文章目录

  • 各版本
  • 下载
    • Gradle
    • Spring-Framework
    • 其他
  • 预编译
    • 加快构建
    • cmd
    • 导入 IDEA
  • 调试源码
    • 添加模块
    • 修改 build.gradle
    • 编写测试代码
  • 参考链接

背景:这还用多说什么吗?干就完了,你起码得在项目中遇到问题,知道如何去 DEBUG 吧,现在谁没用到 Spring?纯 servlet?或许有。但是作为一个Javaer 学习 Spring 是刻不容缓的事情(自己越来越感受到这件事了)。
本片文章主要介绍如何搭建 Spring 阅读环境

各版本

Win10;IDEA2019.2;Gradle5.6.4;JDK8;Spring5.2.0
这里注意,IDEA2018 是不行的,你直接用 2019 版本,你会发现搭建这个环境挺简单的嘛,否则很难受(别问我为什么难受~);Gradle 版本的话,我没测试,但是这个版本是可以的

下载

Gradle

官网 下载对应版本的 binary-only 即可
Spring 源码阅读环境搭建_第1张图片
下载好后就是配置环境变量了,这个是基本操作,不会的自己 Google 解决

Spring-Framework

直接去 Github 上下载超级慢,所以选了个折中的办法。在码云 上面注册一个账号,然后它是可以同步你的 Github 仓库的,即:

  • 先将 Spring-Framework Fork一份到自己的仓库
  • 将自己仓库里的 Spring-Framework 的同步到自己的码云账号
  • 下载即可

其他

Java8:Spring5以上的必须
IDEA:2019.X

预编译

下面的操作可能大家做法不一样,但是我这里讲窝窝屎怎么做的,然年我是本地搭建成功的

加快构建

这个也是需要下载很多依赖包的,所以得用国内的阿里云镜像下载,嗖嗖的。
修改项目根目录下的build.gradle文件

// 在开始的buildscript中加入如下内容
// 加快构建脚本自身使用的依赖下载。
buildscript {
repositories {
maven{ url ‘https://maven.aliyun.com/nexus/content/groups/public/’ }
maven{ url ‘https://maven.aliyun.com/nexus/content/repositories/jcenter’}
}
dependencies {
classpath ‘org.asciidoctor:asciidoctorj-pdf:1.5.0-alpha.16’
classpath ‘io.spring.asciidoctor:spring-asciidoctor-extensions:0.1.3.RELEASE’
}
}
// 在configure(allprojects)中添加maven仓库。
// 加快项目使用的依赖下载
configure(allprojects) {
dependencyManagement {
repositories {
maven{ url ‘https://maven.aliyun.com/nexus/content/groups/public/’ }
maven{ url ‘https://maven.aliyun.com/nexus/content/repositories/jcenter’}
maven { url “https://repo.spring.io/libs-spring-framework-build” }
}
}
}

cmd

进入到你下载的源码目录下预编译:gradlew.bat :spring-oxm:compileTestJava
Spring 源码阅读环境搭建_第2张图片
出现 BUILD SUCCESSFUL 就是编译成功了!

导入 IDEA

file->new->project from exsiting source… 选择你的源码目录,选择 Gradle
进入后 IDEA 就会自动帮你构建;构建好之后在 IDEA 控制台也会出现成功的提示。
到现在为止,源码环境就搭建成功了。那么如何调试呢?

调试源码

添加模块

右键根项目spring-framewok->New-> Module-> 选择Gradle->Java->Next-> 添加项目命名->Finish,一个属于自己的项目模块就创建完成了。这个时候发现项目目录下的 settings.gradle 文件多了一行 include ‘你的模块名’, 这是自动添加的,是不是很智能,省去了麻烦。但是这里有一个注意的地方,需要将include '你的模块名’移动到 rootProject.children.each 的上方,否则 spring 的构建脚本是无法正确导入我们自定义的这个模块的。(这点可以说明 gradle 是按照顺序来执行脚本的)

修改 build.gradle

  1. 首先将自己创建的模块下默认的 build.gradle 改为 模块名.gradle
  2. 改变里面的内容,如下:

// 对该模块的描述
description = “spring学习模块”
// 项目依赖
dependencies {
// 添加对spring-context的依赖
implementation(project(":spring-context"))
}

编写测试代码

package com.nhy.spring.Service;

public interface UserService {
	public String getName(String firstName, String lastName);
}

package com.nhy.spring.Service.Impl;

import com.nhy.spring.Service.UserService;

public class UserServiceImpl implements UserService {

	@Override
	public String getName(String firstName, String lastName) {
		return String.format("%s%s", firstName, lastName);
	}

}
package com.nhy.spring;

import com.nhy.spring.Service.UserService;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class NhyMain {
	public static void main(String[] args) {
		ApplicationContext applicationContext = new ClassPathXmlApplicationContext("classpath:test.xml");
		UserService userService = (UserService) applicationContext.getBean("userService");
		System.out.println(userService.getName("Hello", " World"));
	}
}

XML 的约束可以直接在对应 Spring 模块下的 test/sources 下查找 xml 文件,复制粘贴即可。



<beans>
	<alias name="someMessageSource" alias="myMessageSource"/>
	<bean id="userService" class="com.nhy.spring.Service.Impl.UserServiceImpl">bean>
beans>

此时即可运行 Main 文件:
Spring 源码阅读环境搭建_第3张图片
成功!
如果自己打一个断点进去看,发现就是走的你导入的 Spring-framework 下面的模块代码。
所以,现在享受这个你所认为的感觉吧,管他是煎熬、兴奋 ;干,就完了!

参考链接

Spring源码之环境搭建

你可能感兴趣的:(Spring)