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

米饭10个月前行业资讯780

三、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


相关文章

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

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

二、分布式事务首先我们看看项目中的下单业务整体流程(主要理解思路):由于订单、购物车、商品分别在三个不同的微服务,而每个微服务都有自己独立的数据库,因此下单过程中就会跨多个数据库完成业务。而每个微服务...

【Docker 】深入探索 Docker :容器健康检查与安全扫描

【Docker 】深入探索 Docker :容器健康检查与安全扫描

在现代容器化应用的开发与部署过程中,确保服务的可用性和安全性至关重要。本文将探讨容器的健康检查和安全扫描,并分享最佳实践。一、容器健康检查1.1 健康检查的作用健康检查是确保服务在运行时处于可用状态的...

网络】DNS协议、ICMP协议

网络】DNS协议、ICMP协议

1.DNS协议DNS(Domain Name System,域名系统)协议,是一个用来将域名转化为IP地址的应用层协议。1.1DNS背景TCP/IP中通过IP地址和端口号的方式,来确定网络中一个主机上...

【Docker】0.空间资源隔离

【Docker】0.空间资源隔离

NameSpacedd + option : 可以从标准输入或文件中读取数据,根据指定格式来转换数据,再输出到文件、设备或标准输出 --help 显...

Linux CentOS7虚拟机配置静态IP并允许上网的配置方法

Linux CentOS7虚拟机配置静态IP并允许上网的配置方法

前言当我们成功的将CentOS镜像安装到了我们的虚拟机上后,可是这个时候,虚拟机还没有配置IP信息,为了后面开发方便,我们需要设置一个静态IP。一、开启本地电脑VMnet8本地电脑,右键点击网络-&g...

MySQL运维之分库分表与读写分离

MySQL运维之分库分表与读写分离

分库分表1.介绍问题分析随着互联网以及移动互联网的发展,应用系统的数据量也是成指数式增长,若采用单数据库进行数据存储,存在以下性能瓶颈:IO瓶颈:热点数据太多,数据库缓存不足,产生大量磁盘IO,效率较...

发表评论    

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