AspectJ和Spring AOP(java动态代理和CGLIB)简单介绍
1、AOP介绍
什么是AOP:AOP就是面向切面编程。使用的背景:
1)我们的振隆维护着一千个方法,一天老板让振隆把这一千个方法都要加上事务代码(统一代码)
2)振隆咬咬牙,添加了一个新的方法,然后让这一千个方法去调用这个事务的方法,解决了当前问题。
3)但是过了一段时间,老板又跑过来和振隆说,这一千个方法又要调用日志打印的方法功能,同时又要添加用户合法性验证。这个时候振隆有两种选择:1)对老板说:滚。2)使用aop技术来实现这个功能,以后老板随便加都可以轻松搞定。详细解说见(https://blog.csdn.net/wenbingoon/article/details/8988553)这篇文章的前面部分。
2、目前实现AOP的技术
目前实现AOP的技术:AspectJ和Spring AOP,这两个的核心区别:
1)AspectJ需要用到额外的编译器,这个比较麻烦,需要在工程外处理,不易于移植。AOP是在jdk基础上实现了,不用额外添加jdk外的执行文件。
2)因为是编译器期执行,在运行时没有开销,所以性能上AspectJ肯定是强于AOP的。
其他的一些不同可以参考如下:
(图片来自https://mp.weixin.qq.com/s?src=11×tamp=1539333289&ver=1177&signature=eBT8W1-qYrRBRkS–DwX9ruGZV-nSGNPwIemr0OOMdytxtr4rAbI13rXg0wogEVgCr9KGeA06cCYXzqzuSH-BTlMOjldrqwvZii-T0Qu9u0Oi-WJAeojax23*RFjDYWZ&new=1)
3、Spring AOP的实现方式
Spring AOP实现主要是通过代理类的方式实现,有jdk代理和CGLIB代理两种方式,
1)CGLIB介绍:https://blog.csdn.net/danchu/article/details/70238002
2)CGLIB和Java动态代理的区别
2.1)Java动态代理只能够对接口进行代理,不能对普通的类进行代理(因为所有生成的代理类的父类为Proxy,Java类继承机制不允许多重继承);CGLIB能够代理普通类;
2.2)Java动态代理使用Java原生的反射API进行操作,在生成类上比较高效;CGLIB使用ASM框架直接对字节码进行操作,在类的执行过程中比较高效
3)Spring AOP默认的使用方式:
如果目标对象没有实现接口,则默认会采用CGLIB代理;
如果目标对象实现了接口,默认会采用Java动态代理;
AspectJ和Spring AOP(java动态代理和CGLIB)简单介绍相关推荐
- Spring中AOP的两种代理方式(Java动态代理和CGLIB代理)
第一种代理即Java的动态代理方式上一篇已经分析,在这里不再介绍,现在我们先来了解下GCLIB代理是什么?它又是怎样实现的?和Java动态代理有什么区别? cglib(Code Generation ...
- Java动态代理和Cglib动态代理最强王者阵容
Python实战社群 Java实战社群 长按识别下方二维码,按需求添加 扫码关注添加客服 进Python社群▲ 扫码关注添加客服 进Java社群▲ 作者丨黎杜 来源丨非科班的科班(LDCldc1230 ...
- java动态代理和cglib动态代理
本文转自: http://blog.csdn.net/leon709/article/details/9529307 动态代理应用广泛,spring,Struts等框架很多功能是通过动态代理,或者进一 ...
- Spring AOP之---基于JDK动态代理和CGLib动态代理的AOP实现
AOP(面向切面编程)是OOP的有益补充,它只适合那些具有横切逻辑的应用场合,如性能监测,访问控制,事物管理,日志记录等.至于怎么理解横切逻辑,敲完实例代码也就明白了. 为什么要使用AOP,举个栗子: ...
- Spring AOP源码分析(二)JDK动态代理和CGLIB介绍
2019独角兽企业重金招聘Python工程师标准>>> 本篇是介绍java实现代理对象的两种方法,JDK动态代理和CGLIB. JDK动态代理:针对你所调用的方法是接口所定义的方法. ...
- Java动态代理的两种实现方法:JDK动态代理和CGLIB动态代理
Java动态代理的两种实现方法:JDK动态代理和CGLIB动态代理 代理模式 JDK动态代理 CGLIB动态代理 代理模式 代理模式是23种设计模式的一种,指一个对象A通过持有另一个对象B,可以具有B ...
- Java中的原生动态代理和CGLIB动态代理的原理,我不信你全知道!
作者:CarpenterLee cnblogs.com/CarpenterLee/p/8241042.html 动态代理在Java中有着广泛的应用,比如Spring AOP,Hibernate数据查询 ...
- JAVA 进阶篇 动态代理 JDK动态代理和CGlib动态代理
JDK动态代理和CGlib动态代理 JDK动态代理: 利用反射机制生成一个实现代理接口的匿名类,在调用具体方法前调用InvokeHandler来处理. CGlib动态代理: 利用ASM(开源的Java ...
- Java两种动态代理JDK动态代理和CGLIB动态代理
目录 代理模式 JDK动态代理 cglib动态代理 测试 代理模式 代理模式是23种设计模式的一种,他是指一个对象A通过持有另一个对象B,可以具有B同样的行为的模式.为了对外开放协议,B往往实现了一个 ...
最新文章
- linux驱动:音频驱动(二)ASoc
- angular蚂蚁_Angular 中后台前端解决方案 - Ng Alain 介绍
- hibernate 高级映射 --张国亮总结第一季
- 大叔也说Xamarin~Android篇~Activity之间传递数组
- hadoop centos 安装
- Linux编程 20 shell编程(shell脚本创建,echo显示信息)
- redis 数据结构
- 润乾报表 数据集ds1中,数据源xmglxt_x3无数据库连接,且未设定数据连接工厂,请检查数据源设定:...
- asp.net验证提示美化效果
- linux 进程通信 消息队列
- JavaScript传参年月日格式日期自动运算问题解决
- java.lang.OutOfMemoryError: Java heap space错误和方法(集、转)
- vm虚拟机的安装使用装系统有序列号
- QComboBox样式表设置
- 天津等保测评机构项目测评收费价格标准参考
- Java编程那些事儿
- vue在vscode代码格式化
- PsExec用法及远程操控执行脚本举例
- 制造业ERP如何做好成本核算管理?
- android 用户引导高亮,Android开发之高亮引导
热门文章
- 删除 此电脑 文件夹
- pandas中使用rolling.corr函数计算两个时间序列数据列之间的滚动相关性(Rolling correlations)、例如,计算两种商品销售额之间的3个月的滚动相关性
- python使用statsmodels包中的tsaplots函数和lags参数可视化时间序列数据指定滞后位置个数(级别)以前的所有自相关性(plot the autocorrelation)
- R语言使用R基础安装中的glm函数构建乳腺癌二分类预测逻辑回归模型、分类预测器(分类变量)被自动替换为一组虚拟编码变量、summary函数查看检查模型、使用table函数计算混淆矩阵评估分类模型性能
- pandas计算滑动窗口中的最小值实战(Rolling Minimum in a Pandas Column):计算单数据列滑动窗口中的最小值、计算多数据列滑动窗口中的最小值
- Seaborn可视化图像调整图像大小(figure size)方法实战(Adjust the Figure Size)
- python代码实现堆排序
- 白化(whitening)是什么?白化(whitening)与PCA(principle component analysis)的区别是什么?
- DASI_1_IntroToData
- The Third Revolution in Sequencing Technology