对应的包拉取地址换成阿里云,否则会报错:jar包无法下载等错误。
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")
}
}
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编译报错,如下图所示:
为了避免第三方class的冲突,Spring把最新的cglib和objenesis给重新打包了(repack)了,它并没有在源码提供这部分代码,而是直接将其放在jar包当中,这也就导致了我们拉取代码后出现编译错误。那么为了通过编译,我们要把缺失的jar补回来。
compile fileTree(dir:'libs',include: '*.jar')
遇到spring-oxm模块中测试类找不到怎么办?执行如下图所示对应的两个命令:
遇到spring-orm报错,找不到符合怎么办?如下所示,因为都是测试类,直接注释代码
我们发现类的声明使用了aspect而不是class。
AOP(Aspect Orient Programming,面向切面编程)作为面向对象编程的一种补充,当前已经成为一种比较成熟的编程思想。
而AOP在Spring中也占据者举足轻重的作用,可以说没有AOP就没有Spring现在的流行,当然AOP的实现有些时候也依赖AspectJ
如下示例:
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,选择版本,如下图所示:
直接点击jar包安装,注意最后一步需要选择JDK的安装地址
编译器要改为Ajc,同时要设置Ajc的安装目录,要选择到aspectjtools.jar这个层面,同时务必要选择Delegate to Javac选项,它的作用是只编译AspectJ的Facets项目,其他使用JDK代理,如果不勾选,会全部使用Ajc编译,会导致编译错误。