# JavaDynamicProxy **Repository Path**: burns/JavaDynamicProxy ## Basic Information - **Project Name**: JavaDynamicProxy - **Description**: java动态代理 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2022-03-24 - **Last Updated**: 2022-03-24 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README https://zhuanlan.zhihu.com/p/347141071 本文主要介绍Java中两种常见的动态代理方式:JDK原生动态代理和CGLIB动态代理。 由于Java动态代理与java反射机制关系紧密,请读者确保已经了解了Java反射机制。 代理模式 本文将介绍的Java动态代理与设计模式中的代理模式有关,什么是代理模式呢? 代理模式:给某一个对象提供一个代理,并由代理对象来控制对真实对象的访问。代理模式是一种结构型设计模式。 代理模式角色分为 3 种: Subject(抽象主题角色):定义代理类和真实主题的公共对外方法,也是代理类代理真实主题的方法; RealSubject(真实主题角色):真正实现业务逻辑的类; Proxy(代理主题角色):用来代理和封装真实主题; 代理模式的结构比较简单,其核心是代理类,为了让客户端能够一致性地对待真实对象和代理对象,在代理模式中引入了抽象层。 ![img.png](images/img.png) 代理模式按照职责(使用场景)来分类,至少可以分为以下几类:1、远程代理。 2、虚拟代理。 3、Copy-on-Write 代理。 4、保护(Protect or Access)代理。 5、Cache代理。 6、防火墙(Firewall)代理。 7、同步化(Synchronization)代理。 8、智能引用(Smart Reference)代理等等。 如果根据字节码的创建时机来分类,可以分为静态代理和动态代理: 所谓静态也就是在程序运行前就已经存在代理类的字节码文件,代理类和真实主题角色的关系在运行前就确定了。 而动态代理的源码是在程序运行期间由JVM根据反射等机制动态的生成,所以在运行前并不存在代理类的字节码文件