水滴石穿
撸码这么久了,对于动态代理,也只是一直有概念,而从未去深究,夜深人静的时候难以入睡,到底什么是动态代理,怎么代理?
今天便一探究竟:
1、被代理对象target必须实现接口
2、代理对象必须 implements InvocationHandler 或者 extends Porxy;
3、动态代理是通过反射机制实现的
针对以上三点,想比已是众所周知,然而实际工作中并未深刻体会到其用法,故也只是停留在概念表面而不知其所以然。
So...
创建接口:
创建被代理对象 target
创建代理对象
代理对象如何产生出target的代理呢?
在 invoke 方法中完成通过反射的调用
============然而,这只是调用的方法而已============
JDK动态代理的基本原理:
1.代理对象获取target的引用和target implements 的 接口,重新生成一个新的类$Proxy0,
2.$Proxy extends Proxy implements target的接口
3.然后重新生成class字节码,重新编译(该过程在内存中实现)
这里要弄清楚两个东西:
1、this.h ,来自父类Proxy中
2、m4
这里就讲清楚了,刚开始提到的三点
通过target的接口,根据反射,获取其对应的方法
代理对象通过Proxy 中的 InvocationHandler 对象对 要执行的方法进行调用
初来乍到,欢迎指正
怀着希望走,目标就在前方