(11)纯手写JDK动态代理

概要:1动态代理(过程 角色 Proxy0)    2手写(InvocationHandler 、2Handler实现、3类加载器、4MyProxy)

一、动态代理

1、过程

1)Proxy通过传递给它的参数(interfaces/invocationHandler生成代理类$Proxy0;

2)Proxy通过传递给它的参数(ClassLoader)来加载生成代理类$Proxy0字节码文件

2、角色

1业务接口Interface、2业务实现类target、3业务处理类Handler、4JVM在内存中生成的动态代理类$Proxy0

1业务接口
2业务实现类target
3业务处理类Handler

3、$Proxy0

1)实现业务接口(Man),客户端可调接口方法

2)继承Proxy,通过构造方法将业务处理类传入给父类Proxy进行初始化。(Proxy中存在protected InvocationHandler h;)

最终回调Handler的invoke完成调用

二、手写动态代理

1InvocationHandler 、2Handler实现、3类加载器、4MyProxy

1、自定义InvocationHandler:

2、实现MyInvocationHandler的业务处理Handler:

3、自定义类加载器MyClassLoader:

自己在内存中生成动态代理类,加载

重写findClass,为在指定路径下加载指定字节码文件:

4、自定义MyProxy(当于JDK的Proxy):

1)根据interfaces接口构造动态代理类需要方法(利用反射获取)

2)动态生成代理类(.java)进行编译,生成字节码文件(.class),加载

3)实例化构造方法(反射机制),初始化业务Hanlder

5其他

1)MyProxy的其他方法 编译:

2)getMethodString方法

3)运行结果

4)生成的$MyProxy0:

//www.greatytc.com/p/58759fef38b8

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容