Atitit 代理CGLIB 动态代理 AspectJ静态代理区别
Atitit 代理CGLIB 动态代理 AspectJ静态代理区别
1.1. AOP 代理主要分为静态代理和动态代理两大类,静态代理以 AspectJ 为代表;而动态代理则以 spring AOP 为代表 1
1.2. JDK动态代理是模拟接口实现的方式,cglib是模拟子类继承的方式1
1.3. CGLIB代理模式的缺点 在static和final方法上应用横切关注点也是无法做到的。2
1.1. AOP 代理主要分为静态代理和动态代理两大类,静态代理以 AspectJ 为代表;而动态代理则以 spring AOP 为代表
CGLIB动态代理 是可以针对接口与普通类(继承方式),底层使用ASM框架生成字节码完成代理功能
我在网上查资料说AspectJ是静态代理 在编译期间就生成了class文件完成了代理。这点容易理解一种编译的技术
因为spring支持AspectJ风格的AOP
还是动态的,标注中用到的JoinPoint等类都来自aspectj包
1.2. JDK动态代理是模拟接口实现的方式,cglib是模拟子类继承的方式
JDK动态代理是模拟接口实现的方式,cglib是模拟子类继承的方式,一般采用前者,因为前者效率高。后者不建议使用,除非非用不可
AOP(Aspect Orient Programming),作为面向对象编程的一种补充,广泛应用于处理一些具有横切性质的系统级服务,如事务管理、安全检查、缓存、对象池管理等。AOP 实现的关键就在于 AOP 框架自动创建的 AOP 代理,AOP 代理则可分为静态代理和动态代理两大类,其中静态代理是指使用 AOP 框架提供的命令进行编译,从而在编译阶段就可生成 AOP 代理类,因此也称为编译时增强;而动态代理则在运行时借助于 JDK 动态代理、CGLIB 等在内存中“临时”生成 AOP 动态代理类,因此也被称为运行时增强。
区别只是生成 AOP 代理类的时机不同:AspectJ 采用编译时生成 AOP 代理类,因此具有更好的性能,但需要使用特定的编译器进行处理;而 Spring AOP 则采用运行时生成 AOP 代理类,因此无需使用特定编译器进行处理。由于 Spring AOP 需要在每次运行时生成 AOP 代理,因此性能略差一些。
1.3. CGLIB代理模式的缺点 在static和final方法上应用横切关注点也是无法做到的。
因为Spring基于代理模式(使用CGLIB),它有一个使用限制,即无法在使用final修饰的bean上应用横切关注点。因为代理需要对Java类进行继承,一旦使用了关键字final,这将是无法做到的。
例如,在Spring bean MyServicesImpl上使用关键字final,并配置一个“execution(public * *(..))”这样的切入点,将导致运行时异常(exception),因为Spring不能为MyServicesImpl生成代理。
这种情况下,你也许会考虑使用AspectJ,其支持编译期织入且不需要生成代理。
于此相似,在static和final方法上应用横切关注点也是无法做到的。因为Spring基于代理模式。如果你在这些方法上配置通知,将导致运行时异常,因为static和final方法是不能被覆盖的。在这种情况下,你也会考虑使用AspectJ,因为其支持编译期织入且不需要生成代理。
AOP日志,记录调用类、方法、方法参数名称、方法参数值(包括对象和基本类型) - paincupid的专栏 - 博客频道 - CSDN.NET.html
作者:: 绰号:老哇的爪子claw of Eagle 偶像破坏者Iconoclast image-smasher
简称 Attilax Akbar 阿提拉克斯 阿克巴
全名:Attilax bin Mahmud bin attila bin Solomon Akbar Al Rapanui
阿提拉克斯 本 马哈茂德 本 阿提拉 本 所罗门 阿克巴 阿尔 拉帕努伊
常用名:艾提拉(艾龙), EMAIL:1466519819@qq.com
转载请注明来源:attilax的专栏 http://blog.csdn.net/attilax
--Atiend
Atitit 代理CGLIB 动态代理 AspectJ静态代理区别相关推荐
- cglib动态代理jar包_代理模式详解:静态代理+JDK/CGLIB 动态代理实战
1. 代理模式 代理模式是一种比较好的理解的设计模式.简单来说就是 我们使用代理对象来代替对真实对象(real object)的访问,这样就可以在不修改原目标对象的前提下,提供额外的功能操作,扩展目标 ...
- 静态代理,cglib动态代理,jdk动态代理区别以及流程详解
1.静态代理 静态代理使用的是代理设计模式,不讲高大上的思想,我们直接实战 这是动物接口,其中有一个吃饭方法 这是其中的一只动物,实现了动物接口,覆盖了吃饭方法 现在我们思考,我想要给猫找一个代理,希 ...
- AspectJ 静态代理实践
文章目录 前言 一.AspectJ下载地址 1.[AspectJ官网地址](https://www.eclipse.org/aspectj/downloads.php) 2.进入jar所在目录,输入C ...
- Java设计模式(五)代理设计模式—静态代理—JDK动态代理—Cglib动态代理
文章目录 什么是代理模式 代理模式应用场景 代理的分类 静态代理 什么是静态代理 深入解析静态代理 小结 动态代理 什么是动态代理 JDK动态代理 原理和实现方式 代码实现 优缺点 Cglib动态代理 ...
- 动态代理——CGLIB动态代理原理示例解析
觉得可以的话点个关注,转个发呗,陆续奉上干货~~~~ 前文我们讲解了JDK动态代理的原理(动态代理--JDK动态代理原理),今天我们来看看CGLIB动态代理是如何实现,最后我们总结下JDK动态代理和C ...
- 代理模式【介绍、静态代理、动态代理、入门、应用】
代理介绍 代理(Proxy)是一种设计模式, 提供了对目标对象另外的访问方式:即通过代理访问目标对象. 这样好处: 可以在目标对象实现的基础上,增强额外的功能操作.(扩展目标对象的功能). 可以做到在 ...
- java jdk动态代理 cglib动态代理demo
最近在研究java动态代理这块,以前也看了很多次java动态代理,感觉一直不是怎么明白,这两天看了看又明白了些,现给出我参考网上写的一个demo jdk动态代理实现: View Code import ...
- 代理模式(Proxy)--静态代理
1,代理模式的概念 代理模式:为其他对象提供一种代理,以控制对这个对象的访问(代理对对象起到中介的作用,可去掉功能服务或者添加额外的服务) 2,代理模式的分类 (1)远程代理:类似于客户机服务器模式 ...
- c++ 之动态库与静态库区别
区别:静态库和动态库最本质的区别就是:该库是否被编译进目标(程序)内部. 分别介绍: 静态(函数)库 一般扩展名为(.a或.lib),这类的函数库通常扩展名为libxxx.a或xxx.lib . 这类 ...
- 动态lacp和静态lacp区别_链路聚合 ——LACP报文详解
一. LACP简介 1.LACP协议简介基于 IEEE802.3ad 标准的LACP(Link Aggregation Control Protocol,链路汇聚控制协议)是一种实现链路动态汇聚与解汇 ...
最新文章
- BNN领域开山之作——不得错过的训练二值化神经网络的方法
- 【硬核书】树与网络上的概率
- 布赖恩·凯利看好比特币现金:更多的用例可以转化为价值
- 给FlvDownloader加了一个视频预览的功能
- 什么是对象的消息_这一次,我们用最详细的方式解析Android消息机制的源码
- 推荐5个免费项目管理工具
- 【原】docker部署单节点consul
- .NET中使用Redis
- 5-1计算机视觉的基本概念
- 微信小程序 环形进度条_微信小程序:实时圆形进度条实现
- 大规模文本分类实验-项目日志
- Ubuntu16.04安装卸载MongoDB
- 计算机用硬盘做缓存,用SSD固态硬盘做缓存加速怎么样实测
- 【机器人算法】机器人运动学参数辨识/DH参数校准/DH参数辨识
- 2021爱分析·时尚品牌数字化厂商全景报告
- 基于树莓派的智能门禁及3D外壳打印设计
- php短信接口开发demo,php短信接口DEMO-云信互联PaaS平台
- 配置:生产计划参数文件
- trie图:Computer Viruses in Planet Pandora
- 手机通讯录式排序php,Android获取手机通讯录-根据排序方式进行
热门文章
- python print%s s_python - print(%s's %s is %s. % \) 有具体代码,请问这种怎么解释?
- import torch 找不到模块_15天Python入门-15-模块与包
- linux编程创建文件,快速创建linux文件
- 2. Windows编程基础
- TCP发送接收数据2
- ios 纯代码 图标排列
- 新宠混血儿诞生记--Java+PHP整合
- ASP.NET中实现无刷新级联
- 开源程序安装框架-BitNami
- 探索与发现,我们在路上