Advice 是什么

66 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第18天,点击查看活动详情

什么是Advice

在我们印象中,advice 的意思一般都是:建议,消息,通知。

在Spring 中,Advice 就被翻译成“通知”,它是系统在PointCut 需要织入的逻辑的载体。

如果我们将Aspect 类比于OOP 中的class,那么Advice 就相当于OOP 中的method。

按照Advice 在JointPoint 的执行的功能或者时机的不同,它可以被分为以下多种不同的形式:

  1. Before Advice
    这是在指定的JoinPoint 执行之前来执行Advice 的类型。比如说,如果指定JoinPoint 是某个方法,那么这个Advice 就会在方法执行前执行。
  2. 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 语句一样。
  3. Around Advice
    Around Advice 的作用是的其指明的JoinPoint 进行包裹。可以在JoinPoint 之前和之后都指定相应的逻辑。在这里读者可能就会想,这看起来就像是Before Advice 和After Advice 的结合。事实上Around Advice 的确是可以完成Before Advice 和After Advice 的功能。但是通常情况下,我们还是应该根据具体场景使用具体的Advice。
  4. Introduction
    Introduction 不同于以上介绍的三种Advice 类型。以上三种的关注点是“执行时机”,而Introduction 关注的是它可以完成的功能。Introduction 的中文意思是“采用;介绍;入门指导;介绍信”。根据其中文含义,我们可以更好地理解其行为。Introduction 的作用就是给JoinPoint 位置的原有的对象添加新的特性或者行为。

总结

这篇文章主要介绍的内容是Advcie 的概念及Advice 的类型划分。Advice 主要分为四种类型,读者可以着重记忆。