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

米饭7个月前行业资讯386

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


相关文章

Docker:LXC容器操作实战

Docker:LXC容器操作实战

前言通过LXC来完成容器的创建、体会什么是容器。利用LXC容器技术来隔离特定的应用,提供虚拟执行环境,从而优化资源管理和部署效率。什么是LXC?LXC为Linux Container的简写,是一种可以...

Linux 配置Java环境(一)

Linux 配置Java环境(一)

一、配置Java环境1、查看系统是否有java环境输入指令java -version回车即可如图表示Linux系统有自带的jdk,但是这并不是我们想要的,所以得卸载2、卸载系统自带的jdk1 .找到具...

容器部署解决方案Docker

容器部署解决方案Docker

前言:Docker容器就是:一个镜像格式;一系列标准操作;一个执行环境。1、容器技术      容器则是直接运行在操作系统内核之上的用户空间。因此,容器虚拟化也被称为“操...

【Docker】在 Ubuntu 上安装 Docker 的详细指南

【Docker】在 Ubuntu 上安装 Docker 的详细指南

Docker 是一个开源的平台,可以让开发者打包应用及其依赖项为一个可移植的容器。本文将详细介绍如何在 Ubuntu 上安装 Docker,包括安装步骤、常见命令以及一些注意事项。一、准备工...

Docker:容器化和虚拟化

Docker:容器化和虚拟化

虚拟化虚拟化是一种资源管理技术,它将计算机的各种实体资源(如CPU、内存、磁盘空间、网络适配器等)予以抽象、转换后呈现出来,并可供分割、组合为一个或多个电脑配置环境。这些资源的新虚拟部分是不受现有资源...

大数据平台之数据存储

大数据平台之数据存储

1.大数据生态技术数据存储处理: 清洗, 关联, 规范化, 组织建模, 通过数据质量的检测, 数据分析然后提供相应的数据服务离线数仓:实时数仓:以Kafka, cancal/Maxwell/Flink...

发表评论    

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