JDK动态代理的深度解析

水滴石穿


 

撸码这么久了,对于动态代理,也只是一直有概念,而从未去深究,夜深人静的时候难以入睡,到底什么是动态代理,怎么代理?

今天便一探究竟:

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 对象对 要执行的方法进行调用

 

初来乍到,欢迎指正


怀着希望走,目标就在前方

 

posted @ 2017-09-01 09:16  江湖一笑  阅读(137)  评论(0编辑  收藏  举报