jdk-动态代理
动态代理-jdk
基于JDK的动态代理要求被代理类必须实现一个公共接口
1、公共接口
public interface Subject {
void hello(String param);
}
2、被代理类
public class SubjectImpl implements Subject {
public void hello(String param) {
System.out.println("hello " + param);
}
}
3、代理类
public class SubjectProxy implements InvocationHandler {
//持有一个被代理类的实例, 类型为公共接口类型
private Subject subject;
public SubjectProxy(Subject subject){
this.subject = subject;
}
//代理逻辑
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
//目标方法执行前
System.out.println("-----begin-----");
Object invoke = method.invoke(subject, args);
//目标方法执行后
System.out.println("-----end-----");
return invoke;
}
}
4、执行代理
//创建被代理类实例
Subject subject = new SubjectImpl();
//创建代理增强实例
SubjectProxy subjectProxy = new SubjectProxy(subject);
//生成真正的代理对象
/*Proxy.newProxyInstance 方法的参数为
1、被代理类的类加载器
2、被代理类实现的接口数组
3、创建的代理增强实例
*/
Subject proxyInstance = (Subject)Proxy.newProxyInstance(subject.getClass().getClassLoader(), subject.getClass().getInterfaces(), subjectProxy);
//执行代理对象的方法,则会自动执行增强逻辑
proxyInstance.hello("Timi");

浙公网安备 33010602011771号