美文网首页
(11)纯手写JDK动态代理

(11)纯手写JDK动态代理

作者: hedgehog1112 | 来源:发表于2020-12-24 13:19 被阅读0次

    概要: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:

    https://www.jianshu.com/p/58759fef38b8

    相关文章

      网友评论

          本文标题:(11)纯手写JDK动态代理

          本文链接:https://www.haomeiwen.com/subject/arkmnktx.html