为代理对象编写一个代理类,然后运行方法前使用代理类执行
通过jdk反射生成代理类,动态在内存中构建代理对象1
2
3
4
5
6
7
8
9
10
11
12
13
14public class InvocationHandlerlmpl implements InvocationHandler {
// 这其实业务实现类对象,用来调用具体的业务方法
private Object target;
// 通过构造函数传入目标对象
public InvocationHandlerlmpl(Object target) {this.target = target}
//动态代理实际运行的代理方法
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println("调用开始处理");
//下面 invoke0方法是以反射的方式来创建对象,第一个参数是要创建的对象,第二个是构成方法的参数,由第二个参数来决定创建对象使用哪个构造方法
Object result = method.invoke(target, args);
System.out.println("调用结束处理");
return result;
}
}
利用asm开源包,对代理对象类的class文件加载进来,通过修改其字节码生成子类来处理。
反射完成代理,可以直接代理类
1 | //代理主要类 |