首先:
Class Proxy:
Module java.base
Package java.lang.reflect
Class Proxy
public class Proxy
extends Object
implements Serializable
如何实现动态代理?
查看Proxy中的方法:
public static Object newProxyInstance(ClassLoader loader, Class<?>[] interfaces, InvocationHandler h)
查看参数:
loader——定义代理类的类加载器
interfaces——代理类要实现的接口列表
h -将方法调用分派给的调用处理程序
总结:使用代理类需要:
被代理类的类加载器 ClassLoader 对象;
被代理类实现的接口的class;(创建的代理类也会实现这个接口)
还要一个执行操作的类 -- 实现了 InvocationHandler 接口的子类。
这样返回的就是第二个传入的接口类型的对象,使用这个对象就能执行被代理类中的方法。
如何执行方法?
InvocationHandler 接口:
Module java.base
Package java.lang.reflect
Interface InvocationHandler
public interface InvocationHandler
该接口只有一个方法:
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable
参数:
proxy 调用方法的代理实例
method 对应于代理实例上调用的接口方法的Method实例。
args 包含在代理实例上的方法调用中传递的参数值的对象数组,如果接口方法不接受任何参数,则返回 null。
实现并重写这个方法,一般需要创建一个接收被代理类的属性:
然后使用这个属性调用传入的方法method参数:
Object result = method.invoke(target,args)
然后返回result就是执行方法的结果;