随笔都是学习笔记
随笔仅供参考,为避免笔记中可能出现的错误误导他人,请勿转载。
posts - 398,comments - 0,views - 13万

首先:

Class Proxy:

1
2
3
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)

查看参数:

1
2
3
4
5
loader——定义代理类的类加载器
 
interfaces——代理类要实现的接口列表
 
h -将方法调用分派给的调用处理程序

总结:使用代理类需要:

    被代理类的类加载器 ClassLoader 对象;

    被代理类实现的接口的class;(创建的代理类也会实现这个接口)

    还要一个执行操作的类 -- 实现了 InvocationHandler 接口的子类。

 

这样返回的就是第二个传入的接口类型的对象,使用这个对象就能执行被代理类中的方法。

 

如何执行方法?

InvocationHandler 接口:

1
2
3
Module java.base
Package java.lang.reflect
Interface InvocationHandler

 

public interface InvocationHandler

 

该接口只有一个方法:

public Object invoke​(Object proxy, Method method, Object[] args) throws Throwable

参数:

1
2
3
4
5
proxy 调用方法的代理实例
 
method 对应于代理实例上调用的接口方法的Method实例。
 
args 包含在代理实例上的方法调用中传递的参数值的对象数组,如果接口方法不接受任何参数,则返回 null

 

 

实现并重写这个方法,一般需要创建一个接收被代理类的属性:

 

 

 

 然后使用这个属性调用传入的方法method参数:

Object  result = method.invoke(target,args)

然后返回result就是执行方法的结果;

 

posted on   时间完全不够用啊  阅读(75)  评论(0编辑  收藏  举报
(评论功能已被禁用)
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示