一文知晓:AspectJ,SpringAOP,cglib,动态代理究竟有啥区别

一切源于需求:

 

我只想写业务流程代码,不想管日志,权限,事务等业务无关的东西,怎么办?

要是我只写业务代码,想要其他代码的时候有人帮我写就好了。。。

于是,代理(代码小蜜)就出现了

代理有好多种实现方式呢:

AspectJ

首先,这是一种语言,类似于Java语言,与Java无缝兼容,而且像Java自带jvm一样,这种语言也自带编译器acj。

从上图可以看出,AspectJ在编译期就织入了代码,这个代理我们称之为 静态代理。

SpringAOP

Spring大行其道,所以AOP这块有了SpringAOP的出现。

当然,使AspectJ的方式也慢慢的退居到次要选择的地位了。。。

Spring一上来就 王炸,直接在运行时再织入,所以就是 动态代理 了。

SpringAOP借鉴了很多AspectJ的思想,就是在以上这一点与AspectJ不同。

SpringAOP并不是直接完成AOP的功能,其根据代理类是否实现接口有两种实现方式:

cglib

基于继承,通过目标类的字节码实例化目标类的一个子类来增强,所以不需要目标类实现某个接口就行。

java proxy

基于反射,代理和目标类实现相同的接口,完成目标类的增强,所以要求目标类必须实现某个接口

 

以上,就是这几个的区别了。

简单即是美。。。

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值