AspectJ 静态代理实践


前言

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如何将切面代码织入到业务代码中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值