随笔都是学习笔记
随笔仅供参考,为避免笔记中可能出现的错误误导他人,请勿转载。

首先:

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就是执行方法的结果;

 

posted on 2022-05-31 16:43  时间完全不够用啊  阅读(60)  评论(0编辑  收藏  举报