AOP概念
Aspect
: A modularization of a concern that cuts across multiple classesJoin 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 proxyWeaving
: 将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.