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

jdk动态代理和cglib动态代理的区别

一、原理区别:

java动态代理是利用反射机制生成一个实现代理接口的匿名类,在调用具体方法前调用InvokeHandler来处理。

而cglib动态代理是利用asm开源包,对代理对象类的class文件加载进来,通过修改其字节码生成子类来处理。

1、如果目标对象实现了接口,默认情况下会采用JDK的动态代理实现AOP 
2、如果目标对象实现了接口,可以强制使用CGLIB实现AOP 

3、如果目标对象没有实现了接口,必须采用CGLIB库,spring会自动在JDK动态代理和CGLIB之间转换

如何强制使用CGLIB实现AOP?
 (1)添加CGLIB库,SPRING_HOME/cglib/*.jar
 (2)在spring配置文件中加入<aop:aspectj-autoproxy proxy-target-class="true"/>

JDK动态代理和CGLIB字节码生成的区别?
 (1)JDK动态代理只能对实现了接口的类生成代理,而不能针对类
 (2)CGLIB是针对类实现代理,主要是对指定的类生成一个子类,覆盖其中的方法
   因为是继承,所以该类或方法最好不要声明成final 

二、两者对比:

JDK动态代理是面向接口,在创建代理实现类时比CGLib要快,创建代理速度快。

CGLib动态代理是通过字节码底层继承要代理类来实现(如果被代理类被final关键字所修饰,那么抱歉会失败),在创建代理这一块没有JDK动态代理快,但是运行速度比JDK动态代理要快。

转载于:https://www.cnblogs.com/wangjing666/p/9660275.html

相关文章:

  • 设计模式-结构型模式,python组合模式
  • webpack4学习笔记
  • 【leetcode】907. Sum of Subarray Minimums
  • rsync+shell脚本完成自动化备份
  • vlan接口及应用
  • JSP的C标签遍历Map数据
  • c#-WPF string,color,brush之间的转换
  • WPF实现滚动显示的TextBlock
  • 不发不行!Netty集成文字图片聊天室外加TCP/IP软硬件通信
  • canvas练习 - 七巧板绘制
  • WPF 一个弧形手势提示动画
  • day11 高阶函数 函数式编程
  • dubbo-consumer
  • echarts 与 百度地图bmap结合系列: 如何设置地图缩放级别和监听缩放事件
  • 洛谷P1829 [国家集训队]Crash的数字表格 / JZPTAB(莫比乌斯反演)
  • (ckeditor+ckfinder用法)Jquery,js获取ckeditor值
  • 【402天】跃迁之路——程序员高效学习方法论探索系列(实验阶段159-2018.03.14)...
  • const let
  • DOM的那些事
  • Java新版本的开发已正式进入轨道,版本号18.3
  • jquery ajax学习笔记
  • JS变量作用域
  • Laravel 实践之路: 数据库迁移与数据填充
  • MySQL常见的两种存储引擎:MyISAM与InnoDB的爱恨情仇
  • mysql外键的使用
  • Promise面试题2实现异步串行执行
  • Python 反序列化安全问题(二)
  • SSH 免密登录
  • 从tcpdump抓包看TCP/IP协议
  • 短视频宝贝=慢?阿里巴巴工程师这样秒开短视频
  • 极限编程 (Extreme Programming) - 发布计划 (Release Planning)
  • 七牛云假注销小指南
  • 我的业余项目总结
  • 异常机制详解
  • 中文输入法与React文本输入框的问题与解决方案
  • 走向全栈之MongoDB的使用
  • #{}和${}的区别?
  • #Linux(make工具和makefile文件以及makefile语法)
  • #NOIP 2014#day.2 T1 无限网络发射器选址
  • $(selector).each()和$.each()的区别
  • (1)(1.19) TeraRanger One/EVO测距仪
  • (2)nginx 安装、启停
  • (MonoGame从入门到放弃-1) MonoGame环境搭建
  • (Pytorch框架)神经网络输出维度调试,做出我们自己的网络来!!(详细教程~)
  • (react踩过的坑)Antd Select(设置了labelInValue)在FormItem中initialValue的问题
  • (vue)页面文件上传获取:action地址
  • (论文阅读26/100)Weakly-supervised learning with convolutional neural networks
  • (七)c52学习之旅-中断
  • (四) 虚拟摄像头vivi体验
  • *_zh_CN.properties 国际化资源文件 struts 防乱码等
  • .gitignore文件设置了忽略但不生效
  • .Net - 类的介绍
  • .NET CLR Hosting 简介
  • .NET导入Excel数据
  • .net分布式压力测试工具(Beetle.DT)