Spring AOP

Posted by sunshine on 2020-10-13
Words 837 and Reading Time 3 Minutes
Viewed Times

AOP概念

  • Aspect: A modularization of a concern that cuts across multiple classes

  • Join point: 程序执行期间的某个时间点(point)。如方法的执行,或者异常的处理,在Spring AOP 中一个Join point

    通常表示方法执行

  • Advice: 被一个Aspect在一个特定的Join point上采用的动作,Advice有许多类型,包括around,before,after等,

    Advice类型稍后展示。许多AOP框架,包括Spring,将Advice 建模为拦截器,并在Join point上维持一条拦截器链

  • Pointcut:一句匹配Join points 的断言,Advice关联着一个Pointcut expression,并且运行在任意一个被

    Pointcut匹配的Join point上。

  • Introduction: 替一个类声明额外的方法或者属性,Spring AOP 使你能够向一个被通知(advised)的对象引入新的接口

    (和相应的实现)

  • Target object: 被一个或者多个Aspect通知(advise)的对象,也称为advised object。由于Spring使用runtime proxies实现AOP,这个对象总是被代理的对象。

  • AOP proxy:以实现Aspect contracts为目的(通知方法执行等)被AOP 框架创建的对象,在Spring中一个AOP proxy 是JDK dynamic proxy 或者 CGLIB proxy

  • Weaving: 将Aspects和应用中的类或者对象连接起来创建一个advised object。这个操作可以在编译时(e.g 使用AspectJ compiler),加载时,或者运行时完成。与其他的纯JavaAOP框架一样,Spring 在运行时执行Weaving

Spring AOP 通知的类型

  • Before advice: 运行在Join point 之前的Advice,但是没有阻止执行流走向Join point的能力(除非抛出异常)
  • After returning advice: 运行在Join point 正常完成之后的Advice (e.g 一个方法没有抛出异常正常返回).
  • After throwing advice: 当方法由于抛出异常退出后运行的Advice
  • After (finally) advice: 无论Join point 以何种方式退出都会执行的Advice (正常或异常退出).
  • Around advice: 环绕Join point(如方法调用)的Advice. 这是功能最强大的一种通知.Around advice 可以在方法调用前或调用执行自定义的行为 它还负责选择是继续到Join point,还是通过返回自己的返回值或抛出异常来简化被通知(advised)的方法的执行。

Pointcut Designators

  • execution:用于匹配方法执行 join points. 在使用Spring AOP的时候,这是主要的pointcut designator

  • within: 限制join points的匹配 含有确定的一些类型(在使用Spring AOP时,执行的方法声明特定的类型)

  • this: 限制join points的匹配, 其中bean 引用了给定类型的实例

  • target:限制join points的匹配,其中target object是给定类型的实例

  • args: 限制join points的匹配,方法参数是给定类型的实例

  • @target:限制join points的匹配,执行对象的类中具有给定类型的注解

  • @args: 限制join points的匹配,传递参数的实际类型具有给定类型的注解

  • @within: 限制join points的匹配 含有具有给定注解的类型

  • @annotation: 限制join points的匹配 连接点中具有给定的注解

🍀 关于具体的切点表达式,有很多博客,文档都有解释,这里引用一些个人觉得比较可以的,也可以查阅Spring文档,但感觉文档里写的不是很全

Aspect切点表达式:AspectJ Pointcuts Language Semantics

博客: 爱宝贝


This is copyright.