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&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动态代理; 

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值