Spring5.0.x源码环境搭建

源码获取

  1. 输入GitHub官网并搜索Spring,如下图所示:
    image

  2. 找到对应的spring-framework的工程,点击链接进入,如下图所示:

image

  1. 切换为Spring 5.0.x版本源码,并获取git分支链接,分支也切换到5.0.x版本,如下图所示:
    image

源码下载以及IDEA导入

  1. 下载源码
    image

  2. 导入idea并修改配置

image
image

对应的包拉取地址换成阿里云,否则会报错:jar包无法下载等错误
image

buildscript {
	repositories {
		gradlePluginPortal()
		maven { url "https://maven.aliyun.com/repository/spring-plugin" }
	}
	dependencies {
		classpath("io.spring.gradle:propdeps-plugin:0.0.9.RELEASE")
		classpath("io.spring.gradle:docbook-reference-plugin:0.3.1")
		classpath("org.asciidoctor:asciidoctorj-pdf:1.5.0-alpha.16")
		classpath("org.asciidoctor:asciidoctorj-epub3:1.5.0-alpha.7")
	}
}

image

repositories {
		maven { url "https://maven.aliyun.com/repository/public" }
		maven { url "https://maven.aliyun.com/repository/google" }
		maven { url "https://maven.aliyun.com/repository/gradle-plugin" }
		mavenCentral()
		maven { url "https://repo.spring.io/libs-spring-framework-build" }
		maven { url "https://maven.aliyun.com/repository/spring" }
}

编译错误解决

所有依赖包下载完毕后,点击build,出现cglib和objenesis编译报错,如下图所示
image

为了避免第三方class的冲突,Spring把最新的cglib和objenesis给重新打包了(repack)了,它并没有在源码提供这部分代码,而是直接将其放在jar包当中,这也就导致了我们拉取代码后出现编译错误。那么为了通过编译,我们要把缺失的jar补回来

image

compile fileTree(dir:'libs',include: '*.jar')

遇到spring-oxm模块中测试类找不到怎么办?执行如下图所示对应的两个命令:
image

遇到spring-orm报错,找不到符合怎么办?如下所示,因为都是测试类,直接注释代码
image

遇到aspect相关类报错怎么办?报错信息如下图所示:
image

我们发现类的声明使用了aspect而不是class

Aspect问题原因

AOP(Aspect Orient Programming,面向切面编程)作为面向对象编程的一种补充,当前已经成为一种比较成熟的编程思想。

而AOP在Spring中也占据者举足轻重的作用,可以说没有AOP就没有Spring现在的流行,当然AOP的实现有些时候也依赖AspectJ

AspectJ实现AOP

如下示例:

public class HelloWorld{
    public void sayHello(){
        System.out.println("Hello AspectJ");
    }
    
    public static void main(String args[]){
        HelloWorld h = new HelloWorld();
        h.sayHello();
    }
}

如上代码毫无疑问会输出“Hello AspectJ”字符串。假设现在客户需要在执行sayHello方法前启动事务,当该方法结束时关闭事务,则在传统编程模式下,我们必须手动修改sayHello方法,如果改用AspectJ,则可以无需修改上面的sayHello方法。下面我们定义一个特殊的“类”

public aspect TxAspect{
    void around():call(void sayHello()){
        System.out.println("Transaction Begin");
        proceed();
        System.out.println("Transaction end");
    }
}

如上所示,TxAspect根本不是一个java类,所以aspect也不是java所支持的关键字,它只是AspectJ才认识的关键字

因为java无法识别TxAspect.java文件中的内容,所以我们需要使用ajc.ext来执行编译:

ajc HelloWorld.java TxAspect.java

可以理解为ajc命令是增强版的javac命令。运行HelloWorld类:

Transaction Begin
Hello AspectJ
Transaction end

问题解决

下载AspectJ

下载AspectJ,选择版本,如下图所示:

image

安装AspectJ

直接点击jar包安装,注意最后一步需要选择JDK的安装地址

image

为spring-aspect工程添加Facets属性

image

image

更改编译器

编译器要改为Ajc,同时要设置Ajc的安装目录,要选择到aspectjtools.jar这个层面,同时务必要选择Delegate to Javac选项,它的作用是只编译AspectJ的Facets项目,其他使用JDK代理,如果不勾选,会全部使用Ajc编译,会导致编译错误

image

编译成功

image

验证源码环境

新建gradle工程
image

添加依赖
image

配置bean
image

新建测试类并运行
image
image

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值