当前位置: 首页 > news >正文

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动态代理。

http://www.jsqmd.com/news/259752/

相关文章:

  • 【课程设计/毕业设计】基于springboot的旅行指南系统整合目的地攻略、行程规划、景点推荐、美食住宿查询、旅行日记分享的设计与实现【附源码、数据库、万字文档】
  • 4.Mybatis中#{}和${}的区别是什么?
  • Java毕设项目推荐-基于springboot的宠物医院宠物信息、医疗服务管理系统的设计与实现【附源码+文档,调试定制服务】
  • ssm649网上书城图书销售商城vue带商家
  • php mongodb扩展
  • ssm645考试系统学生教师管理员vue
  • ssm650springboot高校党员党建党务系统vue
  • 【计算机毕业设计案例】基于springboot的宠物医院中小型宠物医院、连锁宠物诊疗机构管理系统的设计与实现(程序+文档+讲解+定制)
  • Android设备与Mac/Docker全连接指南:有线到无线的完整方案
  • 亲测好用!专科生毕业论文TOP8 AI论文网站测评
  • 解码MQTT协议与DHT11传感器
  • 基于微信小程序的日语学习系统【源码+文档+调试】
  • 基于微信小程序的音乐室预约系统【源码+文档+调试】
  • java-SSM329的四六级英语报名系统-springboot
  • 【课程设计/毕业设计】基于springboot宠物医院智能管理系统基于springboot的宠物医院管理系统的设计与实现【附源码、数据库、万字文档】
  • Lex和Yacc(1) 入门
  • 2026 年机场广告投放公司综合实力排行榜单及选择建议指南:2026年机场广告投放公司如何选?哪家好?哪家靠谱?选哪家? - Top品牌推荐
  • Day21-20260117
  • Java计算机毕设之基于springboot的宠物医院就医预约管理系统的设计与实现(完整前后端代码+说明文档+LW,调试定制等)
  • 计算机Java毕设实战-基于springboot+vue的宠物医院管理系统的设计与实现【完整源码+LW+部署说明+演示视频,全bao一条龙等】
  • QtOpenGL多线程渲染方案深度解析
  • Java毕设选题推荐:基于Java+springboot的宠物医院管理系统的设计与实现【附源码、mysql、文档、调试+代码讲解+全bao等】
  • 开源上门预约系统源码,如何实现智能排班与时间冲突校验?
  • 开源上门预约系统源码,如何实现智能排班与时间冲突校验?
  • 深度测评!继续教育必看的9款AI论文写作软件TOP9推荐
  • Flutter for OpenHarmony 电子合同签署App实战 - 编辑资料实现
  • QT跨平台一次编写,处处编译
  • why Internet is bad?
  • 博客与短视频谁更能成就你的个人品牌?
  • 使用WSL(Windows Subsystem for Linux) - 何苦