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&timestamp=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)简单介绍相关推荐

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

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

  2. Java动态代理和Cglib动态代理最强王者阵容

    Python实战社群 Java实战社群 长按识别下方二维码,按需求添加 扫码关注添加客服 进Python社群▲ 扫码关注添加客服 进Java社群▲ 作者丨黎杜 来源丨非科班的科班(LDCldc1230 ...

  3. java动态代理和cglib动态代理

    本文转自: http://blog.csdn.net/leon709/article/details/9529307 动态代理应用广泛,spring,Struts等框架很多功能是通过动态代理,或者进一 ...

  4. Spring AOP之---基于JDK动态代理和CGLib动态代理的AOP实现

    AOP(面向切面编程)是OOP的有益补充,它只适合那些具有横切逻辑的应用场合,如性能监测,访问控制,事物管理,日志记录等.至于怎么理解横切逻辑,敲完实例代码也就明白了. 为什么要使用AOP,举个栗子: ...

  5. Spring AOP源码分析(二)JDK动态代理和CGLIB介绍

    2019独角兽企业重金招聘Python工程师标准>>> 本篇是介绍java实现代理对象的两种方法,JDK动态代理和CGLIB. JDK动态代理:针对你所调用的方法是接口所定义的方法. ...

  6. Java动态代理的两种实现方法:JDK动态代理和CGLIB动态代理

    Java动态代理的两种实现方法:JDK动态代理和CGLIB动态代理 代理模式 JDK动态代理 CGLIB动态代理 代理模式 代理模式是23种设计模式的一种,指一个对象A通过持有另一个对象B,可以具有B ...

  7. Java中的原生动态代理和CGLIB动态代理的原理,我不信你全知道!

    作者:CarpenterLee cnblogs.com/CarpenterLee/p/8241042.html 动态代理在Java中有着广泛的应用,比如Spring AOP,Hibernate数据查询 ...

  8. JAVA 进阶篇 动态代理 JDK动态代理和CGlib动态代理

    JDK动态代理和CGlib动态代理 JDK动态代理: 利用反射机制生成一个实现代理接口的匿名类,在调用具体方法前调用InvokeHandler来处理. CGlib动态代理: 利用ASM(开源的Java ...

  9. Java两种动态代理JDK动态代理和CGLIB动态代理

    目录 代理模式 JDK动态代理 cglib动态代理 测试 代理模式 代理模式是23种设计模式的一种,他是指一个对象A通过持有另一个对象B,可以具有B同样的行为的模式.为了对外开放协议,B往往实现了一个 ...

最新文章

  1. linux驱动:音频驱动(二)ASoc
  2. angular蚂蚁_Angular 中后台前端解决方案 - Ng Alain 介绍
  3. hibernate 高级映射 --张国亮总结第一季
  4. 大叔也说Xamarin~Android篇~Activity之间传递数组
  5. hadoop centos 安装
  6. Linux编程 20 shell编程(shell脚本创建,echo显示信息)
  7. redis 数据结构
  8. 润乾报表 数据集ds1中,数据源xmglxt_x3无数据库连接,且未设定数据连接工厂,请检查数据源设定:...
  9. asp.net验证提示美化效果
  10. linux 进程通信 消息队列
  11. JavaScript传参年月日格式日期自动运算问题解决
  12. java.lang.OutOfMemoryError: Java heap space错误和方法(集、转)
  13. vm虚拟机的安装使用装系统有序列号
  14. QComboBox样式表设置
  15. 天津等保测评机构项目测评收费价格标准参考
  16. Java编程那些事儿
  17. vue在vscode代码格式化
  18. PsExec用法及远程操控执行脚本举例
  19. 制造业ERP如何做好成本核算管理?
  20. android 用户引导高亮,Android开发之高亮引导

热门文章

  1. 删除 此电脑 文件夹
  2. pandas中使用rolling.corr函数计算两个时间序列数据列之间的滚动相关性(Rolling correlations)、例如,计算两种商品销售额之间的3个月的滚动相关性
  3. python使用statsmodels包中的tsaplots函数和lags参数可视化时间序列数据指定滞后位置个数(级别)以前的所有自相关性(plot the autocorrelation)
  4. R语言使用R基础安装中的glm函数构建乳腺癌二分类预测逻辑回归模型、分类预测器(分类变量)被自动替换为一组虚拟编码变量、summary函数查看检查模型、使用table函数计算混淆矩阵评估分类模型性能
  5. pandas计算滑动窗口中的最小值实战(Rolling Minimum in a Pandas Column):计算单数据列滑动窗口中的最小值、计算多数据列滑动窗口中的最小值
  6. Seaborn可视化图像调整图像大小(figure size)方法实战(Adjust the Figure Size)
  7. python代码实现堆排序
  8. 白化(whitening)是什么?白化(whitening)与PCA(principle component analysis)的区别是什么?
  9. DASI_1_IntroToData
  10. The Third Revolution in Sequencing Technology