Java动态代理
前言
学习spring的aop动态代理的时候看老师视频看不懂了,结尾老师建议看不懂就先去复习。
我懒得写笔记了。
package com.example.spring_aop.proxy.jdk;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
public class ProxyTest {
public static void main(String[] args) {
//目标对象
final Target target=new Target();
//获得增强对象
Advice advice=new Advice();
//参数分别是:1.目标对象加载器2.目标对象相同的接口字节码的对象数组2.InvocationHandler接口
//代理对象返回的对象实际上是一个系统动态生成的proxy对象,这个对象和“真实对象”之间的关联是“有同样的接口”,而不是“能互相转型”。
TargetInterface proxy= (TargetInterface) Proxy.newProxyInstance(target.getClass().getClassLoader(), target.getClass().getInterfaces(), new InvocationHandler() {
@Override
//调用代理对象的任何方法,实质执行的都是invoke方法
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
//执行目标方法
// 前置增强
advice.before();
Object invoke = method.invoke(target, args);
//后置增强
advice.afterReturning();
return invoke;
}
});
//调用代理对象方法
proxy.save();
}
}