文章目录
前言
AspectJ 静态代理,就是代理在编译阶段将AspectJ代码织入到Java字节码中,运行时就是增强后的class
提示:以下是本篇文章正文内容,下面案例可供参考
一、AspectJ下载地址
1.AspectJ官网地址
2.进入jar所在目录,输入CMD,执行命令 java -jar ***.jar
3.一路next
4.安装AspectJ的地址,根据自己来改也可默认,后面配置环境变量要用
5.完成安装
二、配置环境变量
1.配置Path
图如下,根据你安装AspectJ的地址找bin目录:
2.配置ClassPath–配置完成
图如下,找到aspectjrt.jar,注意后面要加上分号加点 ;. 否则后面运行class文件时jvm虚拟机只会在这个classPath下找class导致找不到文件而报错,加上分号点后jvm虚拟机在这个classPath中找不到就会去其它位置找:
三、实践操作
1.创建目录testAspectJ—BusinessTest.java
如图所示:
package testAspectJ;
public class BusinessTest {
//模拟业务方法
public void business(){
System.out.println("执行businessTest的business()方法");
}
//模拟业务新增方法
public int business2(String name,String age){
System.out.println("执行businessTest的business2()方法" + name);
return 10;
}
}
2. 创建业务类—BusinessTest2.java
package testAspectJ;
public class BusinessTest2 {
//模拟业务方法
public void business(){
System.out.println("执行BusinessTest2的business()方法");
}
}
3.创建AspectJ文件—BeforeAspect.aj—在执行业务之前执行
如图所示:
package testAspectJ;
public aspect BeforeAspect {
before():call(* testAspectJ.*.*(..)){
System.out.println("我是之前,嘿嘿我插队了");
}
}
4.创建运行类
package testAspectJ;
public class AspectTest {
public static void main(String[] args) {
BusinessTest businessTest = new BusinessTest();
businessTest.business();
businessTest.business2("迪加", "3000");
BusinessTest2 businessTest2 = new BusinessTest2();
businessTest2.business();
}
}
5.使用ajc编译使切面代码织入
未编译前:
在testAspectJ目录上运行CMD,在CMD上执行ajc -d . xxx.java xxx.aj 使切面代码在编译阶段织入到业务代码中:
编译后:
6. 运行带有main方法的.class文件
使用 java xxx.class 运行主类需要注意有包要加上包名点,否则会找不到主类,无包则不需要:
7.创建AspectJ文件—AfterAspect.aj—在执行业务之后执行
package testAspectJ;
public aspect AfterAspect {
after():call(* testAspectJ.*.*(..)){
System.out.println("我是之后,嘿嘿我是按顺序排队的");
}
}
8. ajc编译织入切面代码到业务类—运行主类
8.创建AspectJ文件—AroundAspect.aj—在环绕业务方法(之前—之后)执行
package testAspectJ;
public aspect AroundAspect {
Object around():call(* testAspectJ.*.*(..)){
System.out.println("我是环绕,嘿嘿我插队了");
//回调原先的方法
Object result = proceed();
System.out.println("我是环绕,嘿嘿我又按顺序排队了");
return result;
}
}
9.ajc编译织入切面代码到业务类—运行主类
需要注意的是,切面环绕的之前执行的代码会在before切面的代码执行之后执行。
总结
这里对文章进行总结:
整个流程下来就是简单的实践了AspectJ静态代理的实现与AspectJ如何将切面代码织入到业务代码中。