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

米饭7个月前行业资讯371

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


相关文章

Linux--多路转接之epoll

Linux--多路转接之epoll

epoll 是 Linux 下多路复用 I/O 接口 select/poll 的增强版本,它能显著提高程序在大量并发连接中只有少量活跃的情况下的系统 CPU 利用率。它是 Linux 下多路复用 AP...

【Docker】深入理解 Docker Compose 文件:构建和管理多容器应用的指南

【Docker】深入理解 Docker Compose 文件:构建和管理多容器应用的指南

Docker Compose 是一个用于定义和运行多容器 Docker 应用的工具。通过使用 Docker Compose,开发者可以使用 YAML 文件来配置应用服务,并通过单一命令来启动和停止服务...

docker配置国内镜像加速

docker配置国内镜像加速

docker配置国内镜像加速由于国内使用docker拉取镜像时,会经常出现连接超时的网络问题,所以配置Docker 加速来使用国内的镜像加速服务,以提高拉取 Docker 镜像的速度。1、备...

SRE(站点可靠性工程)介绍

SRE(站点可靠性工程)介绍

概述站点可靠性工程(SRE)是 IT 运维的软件工程方案。SRE 团队使用软件作为工具,来管理系统、解决问题并实现运维任务自动化。SRE 执行的任务以前通常由运维团队手动执行,或者交给使用软件和自动化...

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

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

Docker 是现代开发中不可或缺的工具,能够简化应用程序的部署和管理。在本文中,我们将深入探讨 Docker 的核心命令,帮助您在日常工作中高效使用这一强大平台。1. 系统信息命令了解 D...

Linux 部署Java项目-jar包和war包(五)

Linux 部署Java项目-jar包和war包(五)

一、前景(jar包和war包区别)部署之前先说下两种包,java项目部署到服务器一般有用war包的,也有用jar包的,微服务spring-cloud普及后大部分打包都是jar,部署之前先搞清楚自己要打...

发表评论    

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