【Spring源码】Spring AOP的核心概念

废话版

什么是AOP

关于什么是AOP,这里还是要简单介绍下

AOP,Aspect Oriented Programming,面向切面编程,通过预编译和运行期间提供动态代理的方式实现程序功能的统一维护,使用AOP可以降低各个部分的耦合度,提高代码质量

重要概念

  • JoinPoint 连接点:程序执行的某个特定位置

  • PointCut 切点:执行的具体位置(哪些方法要执行)

  • Advice 增强:额外的业务逻辑

  • Aspect 切面:切点+增强

人话版

这些都是比较正式的定义,为了便于理解,用我们身边前一段的状况举个简单的🌰来描述下AOP到底是用来干嘛以及这些重要概念到底指的是什么吧

俺叫李四,是一只打工崽,俺的一天是这样的:

上班离开居住的小区,进入上班的写字楼,中午去办公楼对面街的小饭馆恰饭,晚上下班离开写字楼,进小区回家

井然有序,而且成年累月几乎不会有什么大改变,

忽然,XXX流感😷开始蔓延起来了,于是在写字楼、小饭店这些公共场合的门口都增加了一个进入需要【扫🐎看🐎】的流程(还好出入小区不用),于是,俺的一天变成了这样:

上班离开居住的小区,【扫🐎看🐎】进入上班的写字楼,中午去办公楼对面街的小饭馆【扫🐎看🐎】恰饭,晚上下班离开写字楼,进小区回家

于是——

进出小区、进出写字楼、进出恰饭的小饭店,这些所有可能会增加“额外的业务逻辑”的地方——Join Point 连接点

【扫🐎看🐎】的流程就是俺日常生活以外的部分,即“额外的业务逻辑”——Advice 增强

写字楼、恰饭的小饭店,真实增加了【扫🐎看🐎】这个额外的业务逻辑”的地方——Point Cut 切点

不知道有没有客官注意到,真实的情况是:只有进入这些场所的时候需要【扫🐎看🐎】,离开是不需要的,而切点只标明了位置,那么哪里对“进入”还是“离开”需要【扫🐎看🐎】做出了限制🚫呢?

自问自答:Advice 增强

因为Spring AOP中的Advice其实也是有分类的,我们可以直接通过源代码进行查看

可以看到,抽象类AbstractAspectJAdvic有5个的实现类:

  • AspectJAfterAdvice 后置通知

  • 方法退出的时候执行,不论是正常返回还是异常退出都会执行

  • AspectJAfterReturningAdvice 返回后通知

  • 方法退出的时候执行,只有方法正常完成后执行

  • AspectJAfterThrowingAdvice 抛出异常后通知

  • 方法退出的时候执行,只有方法抛出异常退出时执行

  • AspectJAroundAdvice 环绕通知

  • 可以将要执行的方法(point.proceed())进行封装📦,可在其前后添加需要执行的操作

  • AspectJMethodBeforeAdvice 前置通知

  • 方法调用前执行

  • 21
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 17
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AQin1012

求小鱼干呢~~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值