Spring AOP 实战指南:从入门到精通(2)
三、Spring AOP 详解
3.1 Spring AOP 核心概念:
3.1.1 切点(Pointcut):
切点(Pointcut),也称之为"切入点"。
Pointcut 的作用就是提供一组规则(使用 AspectJ pointcut expression language 来描述),告诉程序对哪些方法来进行功能增强。
上面的表达式 execution(* com.example.demo.controller..(…)) 就是切点表达式。
3.1.2 连接点(Join Point):
满足切点表达式规则的方法,就是连接点。也就是可以被 AOP 控制的方法。
切点和连接点的关系:
连接点是满足切点表达式的元素。切点可以看做是保存了众多连接点的一个集合。
3.1.3 通知(Advice):
通知就是具体要做的工作,指哪些重复的逻辑,也就是共性功能(最终体现为一个方法)。
在 AOP 面向切面编程当中,我们把这部分重复的代码逻辑抽取出来单独定义,这部分代码就是通知的内容。
3.1.4 切面(Aspect):
切面(Aspect)= 切点(Pointcut)+ 通知(Advice)。
通过切面就能够描述当前 AOP 程序需要针对于哪些方法,在什么时候执行什么样的操作。
切面既包含了通知逻辑的定义,也包括了连接点的定义。
3.2 通知类型:
上面我们讲了什么是通知,接下来学习通知的类型。@Around 就是其中一种通知类型,表示环绕通知。Spring 中 AOP 的通知类型有以下几种:
@Around:环绕通知,此注解标注的通知方法在目标方法前后都被执行。
@Before:前置通知,此注解标注的通知方法在目标方法前被执行。
@After:后置通知,此注解标注的通知方法在目标方法后被执行,无论是否有异常都会执行。
@AfterReturning:返回后通知,此注解标注的通知方法在目标方法返回后被执行,有异常不会执行。
@AfterThrowing:异常后通知,此注解标注的通知方法发生异常后执行。
没有异常的运行顺序:
程序正常运行的情况下,@AfterThrowing 标识的通知方法不会执行。
注意:
@Around 环绕通知需要调用 ProceedingJoinPoint.proceed() 来让原始方法执行,其他通知不需要考虑目标方法执行。
@Around 环绕通知方法的返回值,必须指定为 Object,来接收原始方法的返回值,否则原始方法执行完毕,是获取不到返回值的。
一个切面类可以有多个切点。
本文系转载,版权归原作者所有,如若侵权请联系我们进行删除!
云掣基于多年在运维领域的丰富时间经验,编写了《云运维服务白皮书》,欢迎大家互相交流学习:
《云运维服务白皮书》下载地址:https://fs80.cn/v2kbbq
想了解更多大数据运维托管服务、数据库运维托管服务、应用系统运维托管服务的的客户,欢迎点击云掣官网沟通咨询:https://yunche.pro/?t=shequ