动态代理
动态代理概念
动态代理就是,在程序运行期,创建目标对象的代理对象,并对目标对象中的方法进行功能性增强的一种技术。在生成代理对象的过程中,目标对象不变,代理对象中的方法是目标对象方法的增强方法。可以理解为运行期间,对象中方法的动态拦截,在拦截方法的前后执行功能操作。
两种常用的动态代理方式
- 基于接口的动态代理
- 提供者:JDK
- 使用JDK官方的Proxy类创建代理对象
- 代理的目标对象必须实现接口
- 基于类的动态代理
- 提供者:第三方 CGLib
- 使用CGLib的Enhancer类创建代理对象
- 如果报 asmxxxx 异常,需要导入 asm.jar包
两者区别
- JDK Proxy 是 Java 语言自带的功能,无需通过加载第三方类实现;
- Java 对 JDK Proxy 提供了稳定的支持,并且会持续的升级和更新,Java 8 版本中的 JDK - Proxy 性能相比于之前版本提升了很多;
- JDK Proxy 是通过拦截器加反射的方式实现的;
- JDK Proxy 只能代理实现接口的类;
- JDK Proxy 实现和调用起来比较简单;
- CGLib 是第三方提供的工具,基于 ASM 实现的,性能比较高;
- CGLib 无需通过接口来实现,它是针对类实现代理,主要是对指定的类生成一个子类,它是通过实现子类的方式来完成调用的。

浙公网安备 33010602011771号