# JdkProxy **Repository Path**: w1402943677/JdkProxy ## Basic Information - **Project Name**: JdkProxy - **Description**: jdk动态代理学习 - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2017-12-25 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # JdkProxy #### 项目介绍 jdk动态代理学习 #### JDKProxy注意 jdk中的动态代理通过反射类Proxy和InvocationHandler回调接口实现,要求委托类必须实现一个接口,只能对该类接口中定义的方法实现代理,这在实际编程中有一定的局限性。 #### 类图 ![](https://note.youdao.com/yws/public/resource/056b84688b0e0c6ce80737ac2fc6dd19/xmlnote/96DF6AEBAA42466BA5FC2217B0DA5597/3529) #### 实现jdk动态代理流程 1.定义MyInvocationHandler实现InvocationHandler接口。 2.在MyInvocationHandler中定义有参构造方法传入被代理对象。 3.在MyInvocationHandler中实现invoke()方法实现代理逻辑。 4.在MyInvocationHandler中定义getProxy()方法,在该方法中调用Proxy的newProxyInstance()静态方法, 获取代理对象,该代理对象继承了Proxy并且实现了被代理类接口。 #### 代理类执行流程 通过调用动态生成的.class代理类中的add()方法,调用代理类继承的Proxy类中的InvocationHandler属性的invoke方法, 也就是MyInvocationHandler的invoke方法,最后在 MyInvocationHandler 的invoke中调用被代理对象的add方法。 #### 代码流程图 ![](https://upload-images.jianshu.io/upload_images/8139184-892242081cb02704.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/665) #### JVM流程 Java编译器编译好Java文件之后,产生.class 文件在磁盘中。这种class文件是二进制文件,内容是只有JVM虚拟机能够 识别的机器码。JVM虚拟机读取字节码文件,取出二进制数据,加载到内存中,解析.class 文件内的信息,生成对应的 Class对象: ![](https://note.youdao.com/yws/public/resource/056b84688b0e0c6ce80737ac2fc6dd19/xmlnote/ECFB9FC8A1104EA1A6BD3753CD5C8E3B/3532)