持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第18天,点击查看活动详情
什么是Advice
在我们印象中,advice 的意思一般都是:建议,消息,通知。
在Spring 中,Advice 就被翻译成“通知”,它是系统在PointCut 需要织入的逻辑的载体。
如果我们将Aspect 类比于OOP 中的class,那么Advice 就相当于OOP 中的method。
按照Advice 在JointPoint 的执行的功能或者时机的不同,它可以被分为以下多种不同的形式:
- Before Advice
这是在指定的JoinPoint 执行之前来执行Advice 的类型。比如说,如果指定JoinPoint 是某个方法,那么这个Advice 就会在方法执行前执行。 - After Advice
与Before Advice 对应,After Advice 就是在指定的JoinPoint 之后执行Advice。对于After Advice 还可以细分为以下三种类型:
(1) After returning Advice
只有在JoinPoint 所处位置的流程正常执行完成之后,Advice 才会执行。
(2) After throwing Advice
在JoinPoint 所处位置抛出异常之后,Advice 才会执行。
(3) After Advice
不论是正常执行完成还是抛出异常都会执行,就好比异常捕获语句中的finally 语句一样。 - Around Advice
Around Advice 的作用是的其指明的JoinPoint 进行包裹。可以在JoinPoint 之前和之后都指定相应的逻辑。在这里读者可能就会想,这看起来就像是Before Advice 和After Advice 的结合。事实上Around Advice 的确是可以完成Before Advice 和After Advice 的功能。但是通常情况下,我们还是应该根据具体场景使用具体的Advice。 - Introduction
Introduction 不同于以上介绍的三种Advice 类型。以上三种的关注点是“执行时机”,而Introduction 关注的是它可以完成的功能。Introduction 的中文意思是“采用;介绍;入门指导;介绍信”。根据其中文含义,我们可以更好地理解其行为。Introduction 的作用就是给JoinPoint 位置的原有的对象添加新的特性或者行为。
总结
这篇文章主要介绍的内容是Advcie 的概念及Advice 的类型划分。Advice 主要分为四种类型,读者可以着重记忆。