美文网首页
Spring学习(五)-- AOP 基本概念

Spring学习(五)-- AOP 基本概念

作者: MikeShine | 来源:发表于2021-11-16 14:40 被阅读0次

    1. 写在前面

    在之前的学习中,我们对 IOC 相关的内容进行了学习。知道了 IoC 是为了达到解耦合,将Bean之间的控制权交出给第三方的 IoC 容器;也学习了相关的 IoC 高级用法。
    下面我们一起看一下,Spring 中另外一个比较重要的概念—AOP(Aspect Oriented Programming,面向切面编程)。


    2. 几个概念

    2.1 为什么要有 AOP

    这里直接看几张图就可以说明问题:


    两个有类似功能的类

    其实,如果这里将“检测活动有效性”“检测活动xxx”抽取出来,作为公共方法去引入,也是可以的。
    但是,为了方便起见,我们并不愿意这么做。而是做了一个切面。


    AOP切面
    这样一来,只需要在需要使用的地方直接注入即可。
    这就是AOP最原始的出发点。

    2.2 AOP 相关概念

    2.2.1 专业概念

    首先,在AOP这里有一些专业的概念定义:

    • Aspect / 切面: 就是最终被织入的整个功能(代码块)
    • Joint Point / 连接点: 定义在程序流程中何处插入切面的执行点
    • Pointcut / 切点: 特定连接点的集合
    • Advice / 增强: Pointcut 上执行的动作
    • Target / 目标对象: 被waving 的对象
    • Interceptor / 拦截器: 实现 advice 的一种方式
    • Waving / 织入: 将整个 aspect 整合到程序的 JointPoint 处
    2.2.2 举一个栗子

    这里我们可以通过一个例子来生动的理解这些概念:

    夜黑风高杀人夜,在一个叫做 爪哇 的县城发生了一起命案。目击者称,凶手是个男性,身高1.75米。公安局长根据目击者的证词,对所有公安下令:将所有身高1.75米的男性都抓过来审问。公安根据命令,将所有符合条件的人都抓了起来。
    

    将上述的概念和这个例子对应起来:

    • Joint Point: 就是县城里所有的人。
    • Pointcut: 特定的 JointPoint。就是1.75的男人
    • Advice: pointcut 上执行的动作。就是 抓起来审问
    • Aspect: pointcut + advice。 就是 1.75的男人抓起来审问

    这里有一个示意图,需要理解一下:


    AOP概念
    2.2.3 其他概念
    Spring 中支持的 JointPoint类型

    理论上来说,AOP 中 支持的 JointPoint 的类型有多种:构造方法调用、字段设置和获取(get/set)、方法调用、方法执行、异常处理、类的初始化 等等。
    但是,在 Spring 中,只支持 方法执行 类型的 JointPoint

    Advice 类型
    • before advice: 在 jointpoint 之前执行的 advice。该 advice 代码中无法人为规定是否执行 jointpoint中的代码。
    • after return advice: jointpoint 正常执行返回之后执行的advice。
    • after throwing advice: jointpoint 跑出异常执行的
    • after (final) advice: 正常/异常,都执行
    • around advice: 在 jointpoint 执行前/后 都执行的 advice。最常用的 advice。
    • introduction: 为原有对象增加新的属性和方法。

    相关文章

      网友评论

          本文标题:Spring学习(五)-- AOP 基本概念

          本文链接:https://www.haomeiwen.com/subject/yaahzltx.html