跳到主要内容

AOP详解-AOP概览

  • AOP(Aspect Oriented Programming): 面向切面编程,通过预编译方式和运行期动态代理,实现程序功能的统一维护的一种技术。AOP是OOP的延续,是函数式编程的一种衍生范型。利用AOP可以对业务逻辑的各个部分进行隔离,降低耦合度,提高程序的可重用性

AOP 的相关概念

  • Aspect(切面): Aspect 声明类似 Java 中的类声明,里面包含着一些 Pointcut 以及相应的 Advice
  • Join point(连接点): 表示在程序中明确定义的点,比如方法调用、对类成员的访问、异常处理程序块的执行等,可以嵌套其他的 Join point
  • Pointcut(切点): 表示一组 Joint point,这些连接点通过逻辑关系组合,或者通过通配、正则表达式等方式集中起来,它定义了相应的 Advice 将要发生的地方
  • Advice(增强): Advice 定义了在 Pointcut 里面定义的程序点具体要做的操作,通过 before、after、around 来区别是在每个 join point 之前、之后或者代替执行的代码
  • Target(目标对象): 织入 Advice 的目标对象
  • Weaving(织入): 将 Aspect 和其他对象连接起来,并创建 Adviced Object 的过程
  • 概念关系图
    概念关系图

补充内容

  • AOP 中的 Join point 可以有多种类型: 构造方法调用、字段的设置和获取、方法调用、方法执行、异常处理执行、类的初始化。即在 AOP 的概念中我们可以在这些 Join point 上织入我们自定义的 Advice,但在 Spring 中并没有实现上述所有的 Join point,确切的说,Spring 只支持方法执行类型的 Join point
  • Advice 的类型:
    • before advice: 在 join point 前被执行的 advice,但是不能人为阻止 join point 的执行,除非发生异常
    • after return advice: 在一个 join point 正常返回后执行的advice
    • after throwing advice: 当一个 join point 抛出异常后执行的 advice
    • after(final) advice: 无论一个 join point 正常退出或者发生异常,都会被执行的 advice
    • around advice: 在 join point 前和 join point 退出后都执行的advice
    • introduction: 可以为原有的对象增加新的属性和方法