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

米饭7个月前行业资讯370

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


相关文章

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

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

3.5 切点表达式:上面的代码中,我们一直在使用切点表达式来描述切点。下面我们来介绍一下切点表达式的语法。切点表达式常见有两种表达方式:execution:根据方法的签名来匹配。@annotation...

【强化学习】Soft Actor-Critic (SAC) 算法

【强化学习】Soft Actor-Critic (SAC) 算法

一、Soft Actor-Critic (SAC) 算法详解        Soft Actor-Critic(SAC) 是一种最先进的强化学习算法,属于 Ac...

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

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

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

MyBatisPlus从零到一:快速入门与核心功能详解(4)

MyBatisPlus从零到一:快速入门与核心功能详解(4)

三、扩展功能3.1 代码生成插件:在使用MybatisPlus以后,基础的Mapper、Service、PO代码相对固定,重复编写也比较麻烦。因此MybatisPlus官方提供了代码生成器根据数据库表...

Docker-OSX安装与配置完全指南:在Docker中运行接近原生的macOS环境

Docker-OSX安装与配置完全指南:在Docker中运行接近原生的macOS环境

Docker-OSX安装与配置完全指南:在Docker中运行接近原生的macOS环境Docker-OSXsickcodes/Docker-OSX: Docker-OSX 项目尝试通过 Docker 容...

Docker 常用命令

Docker 常用命令

 一、Docker 基础命令1、启动 dockersystemctl start docker2、关闭 dockersystemctl stop docker3、重启 dockersyste...

发表评论    

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