栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

java动态代理三座大山InvocationHandler、newProxyInstance()和invoke()

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

java动态代理三座大山InvocationHandler、newProxyInstance()和invoke()

先分享记录些博主的文章:

《SSM框架》2Spring详解-KuangStudy-文章

java动态代理Proxy.newProxyInstance_徐海兴的专栏-CSDN博客_proxy.newproxyinstance

Java中InvocationHandler接口中第一个参数proxy详解_明洋的专栏-CSDN博客_invocationhandler接口

Proxy.newProxyInstance - 简书

浅谈Java代理一:JDK动态代理-Proxy.newProxyInstance - 我不吃番茄 - 博客园


第一座大山:InvocationHandler

全称java.lang.reflect.InvocationHandler,就是个接口(interface),包含invoke()方法

——public Object invoke(Object proxy, Method method, Object[] args)


第二座大山:Proxy.newProxyInstance()
    public static Object newProxyInstance(ClassLoader loader,
                                          Class[] interfaces,
                                          InvocationHandler h) 
                                          throws IllegalArgumentException
java.lang.reflect.Proxy.newProxyInstance()函数的作用是:返回某个对象的代理对象

newProxyInstance()方法有三个参数:

* ClassLoader loader:Java类加载器; 可以通过这个类型的加载器,在程序运行时,将生成的代理类加载到JVM即Java虚拟机中,以便运行时需要!
* Class[] interfaces:被代理类的所有接口信息; 便于生成的代理类可以具有代理类接口中的所有方法
* InvocationHandler h:调用处理器; 调用实现了InvocationHandler 类的一个回调方法

注意这里的第三个参数InvocationHandler h 就是前面说的第一座大山:InvocationHandler


第三座大山:invoke()

我刚开始踩了一个几乎是必踩的雷,把InvocationHandler的invoke()和method.invoke()搞混了,没办法,因为InvocationHandler的invoke()实现中一定会调用method.invoke()。实际上,虽然都叫invoke(),但是这两个invoke()是两个不同的方法。

因为我搞不清楚Object invoke(Object proxy, Method method, Object[] args) throws Throwable中的第一个参数proxy是干嘛用的,我就搜到第三篇参考文章,看完才明白,我想偏了:

原来proxy是jdk环境给我们的参数,我们想用就用,不想用可以扔一边不管。开始以为是要传递到jdk环境中的参数,还纳闷是谁把proxy传进去的,为什么没看到传参的过程。

现象想想,是因为把InvocationHandler的invoke()和method.invoke()搞混了,所以没有搞清是proxy参数是要传给invoke()的,还是invoke()代来的。

 开始我一直以为参数proxy需要我(或者jdk系统环境)传给invoke()函数,invoke()带入到jdk中给后台环境使用,其实这恰恰是method.invoke()的操作流程。

知道此invoke()非method.invoke()后,一切就迎刃而解了。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/396689.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号