首页 > 其他分享 >spring--JDK动态代理和CGLIB代理的区别

spring--JDK动态代理和CGLIB代理的区别

时间:2024-01-20 20:00:37浏览次数:33  
标签:JDK -- Spring 代理 接口 CGLIB AOP

JDK 动态代理和 CGLIB 代理是 Java 中常用的两种动态代理实现方式,它们各有特点和适用场景:

JDK 动态代理

  • JDK 动态代理是基于接口的代理方式,它使用 Java 反射机制来创建代理对象,并要求目标对象实现一个或多个接口。
  • 在代理过程中,JDK 动态代理会创建一个实现了目标对象所有接口的代理类,并在调用时通过 InvocationHandler 来处理。
  • JDK 动态代理的优点是它是 Java 原生支持的,不需要额外的库,而且与 Java 接口紧密集成。
  • 缺点是它只能代理实现了接口的类。

CGLIB 代理

  • CGLIB(Code Generation Library)是一个第三方代码生成库,它通过继承目标类来创建子类,并在运行时动态生成被代理对象的子类。
  • CGLIB 代理不需要目标对象实现任何接口,因此它适用于为没有实现接口的类创建代理。
  • CGLIB 通常会比 JDK 动态代理更快,因为它使用了更复杂的字节码生成技术来优化运行时性能。
  • 缺点是不能对声明为 final 的类或方法进行代理,因为这会阻止继承和方法覆写。

Spring AOP 为什么会采用这两种方式?

Spring AOP 选择同时支持 JDK 动态代理和 CGLIB 代理,是为了提供更灵活的代理选择,以适应不同的使用场景:

  1. 兼容性:由于 JDK 动态代理只能代理接口,如果应用中的组件没有实现接口,Spring AOP 就会自动退回到 CGLIB 代理。
  2. 性能:虽然 CGLIB 在某些情况下可以提供更好的性能,但它需要额外的库依赖,并且在某些特定环境下可能会有兼容性问题。因此,Spring AOP 提供了选择,让开发者可以根据具体需求决定使用哪种代理方式。
  3. 透明性:Spring AOP 的目标是尽可能地对业务代码透明,不强制要求业务对象必须实现接口,这样可以减少对现有代码的侵入性。
  4. 易用性:Spring AOP 的默认策略是如果目标对象实现了接口,就使用 JDK 动态代理;如果没有实现接口,就使用 CGLIB。这样,开发者通常不需要关心底层使用的是哪种代理方式,Spring 会根据情况自动选择。

综上所述,Spring AOP 采用这两种代理方式,是为了提供更多的灵活性和适应性,让开发者可以便捷地在不同场景下应用 AOP,而不需要担心代理的具体实现细节。

标签:JDK,--,Spring,代理,接口,CGLIB,AOP
From: https://www.cnblogs.com/xylfjk/p/17977052

相关文章

  • 使用Go语言构造区块链
    使用Go语言构造区块链实验概述21世纪最具先峰性的代表性技术之一,就是区块链。目前,它仍然处于,并将长期处于不断成长的时期,而且,在他的身上,还有很多潜在的力量,没有完全展露出来。从本质上来讲,区块链的核心,可以说是一个分布式数据库而已。不过,在区块链中,与传统的分布式数据库,最为独......
  • MyBatis 系列:MyBatis 源码环境搭建
    目录一、环境准备二、下载MyBatis源码和MyBatis-Parent源码三、创建空项目、导入项目四、编译mybatis-parent五、编译mybatis六、测试总结一、环境准备jdk:17maven:3.9.5二、下载MyBatis源码和MyBatis-Parent源码Mybatis:https://github.com/mybatis/mybatis-3.gitMy......
  • 外卖项目again
    一、开发环境html文件夹-----sky文件夹----前端工程打包之后的效果。运行nginx服务器(端口号默认80,双击即启动),前端环境相当于就已经具备了。注意:nginx文件夹必须放在没有中文的目录中,才可正常启动。启动nginx服务器:双击nginx.exe启动,nginx端口号默认80,所以直接输入localhost就......
  • 柏拉图:《理想国》
    柏拉图:《理想国》发布日期:2019-06-03    作者:    来源:    点击:2749内容简介   《理想国》涉及柏拉图思想体系的各个方面,包括哲学、伦理、教育、文艺、政治等内容,主要是探讨理想国家的问题。《理想国》一书是柏拉图的一篇重要对话录,对话录里柏拉图以苏......
  • SpringMVC常用注解
    探索SpringMVC常用注解SpringMVC是一个用于构建Web应用程序的框架,它提供了丰富的注解来简化开发过程。在这篇文章中,我们将深入了解一些常用的SpringMVC注解,从它们的起因到实际应用。起因Web应用程序的开发涉及到处理HTTP请求和响应,传统的方式通常需要编写大量的XML配置和复杂的......
  • HDS 常用命令
    #查看版本/usr/DynamicLinkManager/bin/dlnkmgrview-sys#查看设置/usr/DynamicLinkManager/bin/dlnkmgrview-sys-sfunc#查看lic过期时间,Permanent为永不过期/usr/DynamicLinkManager/bin/dlnkmgrview-sys-lic#显示HBA卡信息/usr/DynamicLinkManager/bin/dlnkmgr......
  • 数位 DP
    引入一般数位DP的题目是这样的:有一个返回值为bool类型的函数\(f(x)\)。这个函数一般是跟\(x\)的数位有关的。给定\(l,r\),求\(l\simr\)中有多少\(x\)的\(f(x)\)为真。\(l,r\le10^{18}\)。典型的例子是windy数:不含前导零且相邻两个数字之差至少为\(......
  • 吴师兄学算法day08 贪心 376. 摆动序列
    题目:376.摆动序列难点:理解难。思路不好想看了卡尔的思路。可以先去重,再遍历。我的代码加调试:fromtypingimportList#摆动序列classSolution:defwiggleMaxLength(self,nums:List[int])->int:iflen(nums)==1:return1......
  • 亚里士多德:《尼各马可伦理学》
    亚里士多德:《尼各马可伦理学》发布日期:2019-06-03    作者:    来源:    点击:373内容简介  《尼各马可伦理学》(《伦理学》),13世纪被译成拉丁文后遂传遍西欧。全书共10卷,132章,探讨了道德行为发展的各个环节和道德关系的各种规定等问题。该书是西方历史上第一......
  • 《我与计算机》
    第一次接触计算机是在小学的时候那时计算机还是电脑,当时只知道单击一下图标打个游戏注册个账号就觉得自己牛的不行,自己会清理个垃圾杀个毒连个网就算会修电脑了,但在学习和了解计算机之后才发现里面另有天地:有交纵错杂宛如迷宫的网络拓扑,有二生万物的神奇二进制运算,有几行代码就能......