首页 存档 技术 查看内容

JDK 动态代理详解,从此徒手写 Proxy

2018-3-30 13:00 |来自: 互联网 357 0

摘要: 长按图片识别二维码报名参与码云用户见面交流会 本文主要介绍 JDK 动态代理的基本原理,让大家更深刻的理解 JDK Proxy ,知其然知其所以然。明白 JDK 动态代理真正的原理及其生成的过程,我们以后写 JDK Proxy 可以 ...

长按图片识别二维码报名参与码云用户见面交流会


本文主要介绍 JDK 动态代理的基本原理,让大家更深刻的理解 JDK Proxy ,知其然知其所以然。明白 JDK 动态代理真正的原理及其生成的过程,我们以后写 JDK Proxy 可以不用去查 demo,就可以徒手写个完美的 Proxy。下面首先来个简单的 Demo,后续的分析过程都依赖这个 Demo 去介绍,例子采用 JDK1.8 运行。


JDK Proxy HelloWorld






运行上面的代码,这样一个简单的JDK Proxy就实现了。


代理生成过程


我们之所以天天叫JDK动态代理,是因为这个代理class是由JDK在运行时动态帮我们生成。在解释代理生成过程前,我们先把-Dsun.misc.ProxyGenerator.saveGeneratedFiles=true 这个参数加入到JVM 启动参数中,它的作用是帮我们把JDK动态生成的proxy class 的字节码保存到硬盘中,帮助我们查看具体生成proxy的内容。我用的Intellij IDEA ,代理class生成后直接放在项目的根目录下的,以具体的包名为目录结构。

代理类生成的过程主要包括两部分:

  • 代理类字节码生成

  • 把字节码通过传入的类加载器加载到虚拟机中

Proxy类的getProxyClass方法入口:需要传入类加载器和interface

然后调用getProxyClass0方法,里面的注解解释很清楚,如果实现当前接口的代理类存在,直接从缓存中返回,如果不存在,则通过ProxyClassFactory来创建。这里可以明显看到有对interface接口数量的限制,不能超过65535。其中proxyClassCache具体初始化信息如下:

proxyClassCache = new WeakCache

声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系 [邮箱地址] 删除

路过

雷人

握手

鲜花

鸡蛋

相关分类

返回顶部