cglib代理和jdk动态代理有什么区别

陈李洁
陈李洁 原创
2023-06-12 11:26:18 650浏览

cglib代理和jdk动态代理的区别在于,JDK动态代理基于接口来创建被代理对象的代理实例,而Cglib代理基于继承的方式对被代理类生成子类。

本教程操作系统:Windows10系统、jdk15版本、Dell G3电脑。

JDK动态代理和Cglib代理都是Java语言中关于代理的实现方式,二者在使用方式、性能以及适用场景等方面存在一定的差异:

1、JDK 动态代理:

屏幕截图 2023-06-12 103510.png

  • 基于接口来创建被代理对象的代理实例。当对象要被代理时,它必须实现一个或多个接口并依赖JDK库。JDK动态代理利用反射机制生成一个包含被代理对象的所有接口的代理类,并覆盖接口中的所有方法,可以对目标对象进行代理。

  • 优点:无需引用第三方库,在JRE运行环境中就可以运行,生成代理对象更加简单、快捷;缺点:仅支持基于接口进行代理,无法对类进行代理,所以它的作用有限。

2.、Cglib 代理:

屏幕截图 2023-06-12 103555.png

  • 基于继承的方式对被代理类生成子类,从而添加代理逻辑。因为它是继承了被代理类,所以它会受到final类、private、static等不可继承属性的影响。

  • 优点:Cglib支持对类进行代理,即使没有接口,也可通过设置回调接口间接地实现。性能比JDK动态代理更高,能够代理那些没有实现任何接口的目标对象。

Cglib在生成代理类的过程中,采用动态生成字节码的方式,在被代理类加载之前就完成了代理类的创建并缓存到内存中,以后每次调用时,都直接使用缓存的代理类。在大多数情况下,Cglib代理比JDK动态代理更适合于大规模的方法拦截和增强等场景。

以上就是cglib代理和jdk动态代理有什么区别的详细内容,更多请关注php中文网其它相关文章!

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。