代理模式:代理类和被代理类实现共同的接口(或继承),代理类中存有指向被代理类的索引,实际执行时通过调用代理类的方法、实际执行的是被代理类的方法。

而AOP,是通过动态代理实现的。

一、简单来说:

  JDK动态代理只能对实现了接口的类生成代理,而不能针对类

  CGLIB是针对类实现代理,主要是对指定的类生成一个子类,覆盖其中的方法(继承)

二、Spring在选择用JDK还是CGLiB的依据:

(1)当Bean实现接口时,Spring就会用JDK的动态代理

(2)当Bean没有实现接口时,Spring使用CGlib是实现

   (3)可以强制使用CGlib(在spring配置中加入<aop:aspectj-autoproxy proxy-target-class="true"/>)

三、CGlib比JDK快?

  (1)使用CGLib实现动态代理,CGLib底层采用ASM字节码生成框架,使用字节码技术生成代理类,比使用Java反射效率要高。唯一需要注意的是,CGLib不能对声明为final的方法进行代理,因为CGLib原理是动态生成被代理类的子类。

  (2)在对JDK动态代理与CGlib动态代理的代码实验中看,1W次执行下,JDK7及8的动态代理性能比CGlib要好20%左右。

转载于:https://www.cnblogs.com/wzj4858/p/10292727.html

动态代理:JDK动态代理和CGLIB代理的区别相关推荐

  1. 代理模式——静态代理,动态代理(JDK代理和CGLib代理)

    概述 由于某些原因需要给某对象提供一个代理以控制对该对象的访问. 这时,访问对象不适合或者不能直接引用目标对象,代理对象作为访问对象和目标对象之间的中介. Java中的代理按照代理类生成时机不同又分为 ...

  2. Spring中AOP的两种代理方式(Java动态代理和CGLIB代理)

    第一种代理即Java的动态代理方式上一篇已经分析,在这里不再介绍,现在我们先来了解下GCLIB代理是什么?它又是怎样实现的?和Java动态代理有什么区别? cglib(Code Generation ...

  3. Spring AOP中的JDK代理和Cglib代理

    JDK动态代理是java JDK自身提供的基于接口的代理,代理类的生成速度快,而代理类的运行速度慢,适合于prototype类型 Cglib代理是基于之类继承的方式的代理,能代理非基于接口的类,适合于 ...

  4. 动态代理(JDK动态代理和CGLIB代理)

    一.什么是代理? 代理是一种常用的设计模式,其目的就是为其他对象提供一个代理以控制对某个对象的访问.代理类负责为委托类预处理消息,过滤消息并转发消息,以及进行消息被委托类执行后的后续处理. 二 Jav ...

  5. 基于Spring AOP的JDK动态代理和CGLIB代理

    一.AOP的概念  在软件业,AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术.AOP是OOP的 ...

  6. 设计模式-代理模式(jdk代理和cglib代理详解)

    说起代理模式,相信很多人早已经很理解,但对于我这个菜鸟,理解的可能还是不到位,写一次博客加深印象. 什么是代理模式呢?代理模式是常用的Java设计模式,它的特征是代理类与委托类有同样的接口,代理类主要 ...

  7. 静态代理,JDK动态代理和CGLIB代理入门学习

    之前面试时面试官问我:"你知道spring中有哪几种代理吗?" 啊?代理?啥子代理?VPN代理吗?嘿嘿,面试官你要种子直说啊......被刷下来了.好吧,入门学习下代理. 为什么需 ...

  8. JDK动态代理和CGLIB代理的区别

    https://www.cnblogs.com/waves-a/p/8036857.html 转载于:https://www.cnblogs.com/wangjing666/p/11357689.ht ...

  9. 利用代码分别实现jdk动态代理和cglib动态代理_代理模式实现方式及优缺点对比...

    作者:爱宝贝丶来源:https://my.oschina.net/zhangxufeng/blog/1633187 代理模式最典型的应用就是AOP,本文结合主要讲解了代理模式的几种实现方式:静态代理和 ...

最新文章

  1. 物理机Windoes上运行VWware 虚拟机连接外部物理机、外部网络的方法
  2. 离散分布概率:几何分布、二项分布和泊松分布
  3. python图片二值化处理百度图api_Python+百度AI实现图像处理-附源码
  4. NYOJ 202 红黑树 数组模拟中序遍历
  5. 第一阶段冲刺 第三天
  6. 语义分割之原图与mask的可视化
  7. ThinkPHP无限分类模块设计
  8. PLSQL 官方下载及安装
  9. excel导入数据到mysql数据库
  10. Java程序员进阶书籍 ,看这11本书就够了
  11. Vue实现自定义下拉菜单
  12. leetcode LCP 03. 机器人大冒险 -java
  13. 计算机资源管理器经常停止运行,解决win10资源管理器经常停止工作的方法
  14. 解读全部二十三种设计模式(附测试代码)
  15. 查询-SPJ练习1参考答案
  16. 牛客华为机试-查找排序
  17. matlab电机系统建模与仿真软件下载,基于MATLAB直流无刷电动机系统建模与仿真
  18. GNU/Linux 初學之旅
  19. linux怎么静态改为自动获取,Linux系统下设置静态IP或自动获取动态IP的简单方法...
  20. 自由人NFT元农(Meta Agriculture)发行计划

热门文章

  1. 算法:关于生成抽样随机数的这些算法
  2. Android UI编程之自定义控件初步(下)——CustomEditText
  3. 通过AOP控制事务的案例
  4. 线性表的动态顺序存储和实现(C语言实现)【线性表】(4)
  5. java字节码提取if语句_java – 使用ASM选择和修改`if`语句
  6. 从消息到数据湖:看 Apache RocketMQ、Hudi、Kyuubi 最新进展
  7. 阿里云容器服务多项重磅发布:高效智能、安全无界的新一代平台
  8. 云原生应用实现规范 - 初识 Operator
  9. Pytorch和Numpy的默认类型
  10. android重新加载程序,从被杀死的Android应用程序中恢复