news 2026/8/29 11:53:57

3.JDK动态代理和CGLib动态代理实现原理和两者的区别

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
3.JDK动态代理和CGLib动态代理实现原理和两者的区别

JDK动态代理和CGLib动态代理实现原理和两者的区别

面试题例子\AOP的例子\spring

1、JDK动态代理
  1. JDK动态代理是基于Java反射机制实现的。
  2. 在使用JDK动态代理时,被代理的对象必须实现一个或多个接口,代理对象的类型由接口类型决定。
  3. 在运行时,JDK动态代理会动态地创建一个实现指定接口的代理类,并且重写该接口的所有方法,使得这些方法的调用都被转发到InvocationHandler对象中的invoke方法中进行处理。

JDK 动态代理就是靠 Java 反射,被代理的得实现接口,运行时会新创一个代理类,把接口方法重写,方法调用都转到 InvocationHandler 的 invoke 方法去处理。

2、CGLib动态代理
  1. CGLib动态代理则是通过继承被代理类来实现的。
  2. 在使用CGLib动态代理时,被代理的类不必实现任何接口,代理对象的类型由被代理类的类型决定。
  3. 在运行时,CGLib动态代理会动态地创建一个被代理类的子类,并且重写该类的所有非final方法

CGLIB 通过继承被代理类实现,被代理类无需接口,运行时动态创建子类,重写非 final 方法来实现代理功能。

3、两者的区别在于:

JDK动态代理只能代理实现了接口的类,而CGLib动态代理可以代理任何类。

JDK动态代理在运行时会动态生成代理类;而CGLib动态代理在运行时会动态生成被代理类的子类。

JDK 动态代理只能代理有接口的类,运行时生成代理类;CGLib 动态代理能代理任何类,运行时生成被代理类的子类。

4、总结

总的来说,如果被代理的类实现了接口,建议使用JDK动态代理;如果被代理的类没有实现接口,建议使用CGLib动态代理。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/25 14:51:00

Android设备与Mac/Docker全连接指南:有线到无线的完整方案

Android设备与Mac/Docker全连接指南:有线到无线📊 连接方式对比表🔌 方式一:USB有线连接(基础方式)适用场景操作步骤📡 方式二:WiFi无线连接2.1 Android 10及以下版本(需…

作者头像 李华
网站建设 2026/8/24 20:40:18

解码WIFI模块与IoT云平台

WIFI模块原理与应用 引言 随着物联网技术快速发展,越来越多的智能设备需要通过无线方式接入互联网。在众多无线通信方案中,**WIFI模组(ESP8266/ESP32系列)**因其成熟的生态和广泛的应用,成为实现远程控制、数据采集等…

作者头像 李华
网站建设 2026/8/22 3:12:31

【课程设计/毕业设计】基于Java+SpringBoot城市化自修室管理系统基于springboot的城市化自修室管理系统【附源码、数据库、万字文档】

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

作者头像 李华
网站建设 2026/8/21 3:50:16

Apache Atlas vs DataHub:主流数据目录工具对比评测

Apache Atlas vs DataHub:主流数据目录工具对比评测关键词:数据目录、元数据管理、Apache Atlas、DataHub、对比评测、企业级数据治理、数据发现 摘要:本文深入对比分析Apache Atlas与DataHub两大主流数据目录工具,从技术架构、核…

作者头像 李华