Spring AOP 实战指南:从入门到精通(2)

米饭9个月前行业资讯543

三、Spring AOP 详解

3.1 Spring AOP 核心概念:

3.1.1 切点(Pointcut):

切点(Pointcut),也称之为"切入点"。


Pointcut 的作用就是提供一组规则(使用 AspectJ pointcut expression language 来描述),告诉程序对哪些方法来进行功能增强。

5375d8cbf4a3eb91909299736cfb8ac2.png

上面的表达式 execution(* com.example.demo.controller..(…)) 就是切点表达式。


3.1.2 连接点(Join Point):

满足切点表达式规则的方法,就是连接点。也就是可以被 AOP 控制的方法。


切点和连接点的关系:

连接点是满足切点表达式的元素。切点可以看做是保存了众多连接点的一个集合。


3.1.3 通知(Advice):

通知就是具体要做的工作,指哪些重复的逻辑,也就是共性功能(最终体现为一个方法)。

7a6fd7ead5c314a88a69103d455d940e.png

在 AOP 面向切面编程当中,我们把这部分重复的代码逻辑抽取出来单独定义,这部分代码就是通知的内容。


3.1.4 切面(Aspect):

切面(Aspect)= 切点(Pointcut)+ 通知(Advice)。


通过切面就能够描述当前 AOP 程序需要针对于哪些方法,在什么时候执行什么样的操作。


切面既包含了通知逻辑的定义,也包括了连接点的定义。

e21add15b900388e17b0d5d00edec306.png

3.2 通知类型:

上面我们讲了什么是通知,接下来学习通知的类型。@Around 就是其中一种通知类型,表示环绕通知。Spring 中 AOP 的通知类型有以下几种:


@Around:环绕通知,此注解标注的通知方法在目标方法前后都被执行。


@Before:前置通知,此注解标注的通知方法在目标方法前被执行。


@After:后置通知,此注解标注的通知方法在目标方法后被执行,无论是否有异常都会执行。


@AfterReturning:返回后通知,此注解标注的通知方法在目标方法返回后被执行,有异常不会执行。


@AfterThrowing:异常后通知,此注解标注的通知方法发生异常后执行。


没有异常的运行顺序:


程序正常运行的情况下,@AfterThrowing 标识的通知方法不会执行。

image-20241011081236137

出现异常的运行顺序:

@AfterReturning 标识的通知方法不会执行,@AfterThrowing 标识的通知方法执行了。

@Around 环绕通知中原始方法调用时有异常,通知中的环绕后的代码逻辑也不会再执行了(因为原始方法调用出异常了)。

image-20241011081349194

注意:


@Around 环绕通知需要调用 ProceedingJoinPoint.proceed() 来让原始方法执行,其他通知不需要考虑目标方法执行。


@Around 环绕通知方法的返回值,必须指定为 Object,来接收原始方法的返回值,否则原始方法执行完毕,是获取不到返回值的。


一个切面类可以有多个切点。


本文系转载,版权归原作者所有,如若侵权请联系我们进行删除!  

云掣基于多年在运维领域的丰富时间经验,编写了《云运维服务白皮书》,欢迎大家互相交流学习:

《云运维服务白皮书》下载地址:https://fs80.cn/v2kbbq

想了解更多大数据运维托管服务、数据库运维托管服务、应用系统运维托管服务的的客户,欢迎点击云掣官网沟通咨询:https://yunche.pro/?t=shequ


相关文章

【网络】NAT、代理服务、内网穿透(1)

【网络】NAT、代理服务、内网穿透(1)

1.NAT技术NAT(Network Address Translation,网络地址转换)技术,是解决IP地址不足的主要手段,并且能够有效地避免来自网络外部的攻击,隐藏并保护网络内部的计算机。1.1...

SRE是什么,与传统运维有什么不同?

SRE是什么,与传统运维有什么不同?

SRE,Site Reliability Engineering,中文翻译为站点可靠性工程师,这个词诞生于谷歌内部。将这个词语展开来说:首先,SRE的关注点在于可靠性;其次,SRE中的"S&...

RabbitMQ 进阶2(消费者可靠性+延迟消息)

RabbitMQ 进阶2(消费者可靠性+延迟消息)

三、消费者可靠性当RabbitMQ向消费者投递消息以后,需要知道消费者的处理状态如何。因为消息投递给消费者并不代表就一定被正确消费了,可能出现的故障有很多,比如:消息投递的过程中出现了网络故障消费者接...

Spring AMQP与RabbitMQ深度整合指南:从基础到高级应用(3)

Spring AMQP与RabbitMQ深度整合指南:从基础到高级应用(3)

3.5 声明交换机和队列:在之前我们都是基于RabbitMQ控制台来创建队列、交换机。但是在实际开发时,队列和交换机是程序员定义的,将来项目上线,又要交给运维去创建。那么程序员就需要把程序中运行的所有...

微服务保护和分布式事务(3)

微服务保护和分布式事务(3)

1.3 请求限流:在簇点链路后面点击流控按钮,即可对其做限流配置:在弹出的菜单中填写:这样就把查询购物车列表这个簇点资源的流量限制在了每秒 6 个,也就是最大 QPS 为 6。1.4 线程隔离:限流可...

【Docker】深入了解 Docker:终极命令指南(下)

【Docker】深入了解 Docker:终极命令指南(下)

5. 网络管理Docker 网络使得容器之间的通信变得简单。以下是管理网络的基本命令:5.1 创建和管理网络命令 说明 示例docker network create <network>...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。