目录
本章节演示如何用字节码编织技术实现动态代理,阅读之前请先了解字节码原理。如果了解JVM更加容易理解
动态代理的底层实现有两种方法,javasist和ASM,一般情况下用ASM,JDK和CGlib都是用的ASM,这里用代码演示一下ASM如何实现动态代理。
demo场景介绍
目标类:TargetService
切面类:AspectService
生成代理类 :TargetServiceProxy
目标:希望生成这样一个类TargetServiceProxy,用于代理TargetService ,在调用targetService.demoQuest()方法之前调用切面的方法aspectService.preOperation(); 我将用字节码编织技术实现下面这个class
public class TargetServiceProxy extends TargetService {
/**
* 切面类
*/
private TargetService targetService;
/**
* 目标类
*/
private AspectService aspectService;
/**
* 代理类构造方法
* @param targetService 切面类
* @param aspectService 目标类
*/
public TargetServiceProxy(TargetService targetService, AspectService aspectService) {
this.targetService = targetService;
this.aspectService = aspectService;
}
/**
* 测试请求
*/
@Override
public int demoQuest() {
// 先指向切面
aspectService.preOperation();
// 执行目标请求
return targetService.demoQuest();
}
}
先看运行结果:

准备工作
maven引入asm依赖
<dependency>
<groupId>org.ow2.asm</groupId>
<artifactId>asm</artifactId>
<version>7.0</version>
</dependency>
<dependency>
<groupId>org.

本文通过实例演示如何利用ASM字节码技术实现动态代理。首先介绍了一个代理场景,然后讲解了准备工作,包括引入ASM依赖,并展示了被代理目标类TargetService、切面类AspectService的代码。最后详细解释了如何编织代理类TargetServiceProxy,使其在调用TargetService方法前执行切面操作。
最低0.47元/天 解锁文章
1684





