切面(Aspect)

一类功能的的增强,是对功能来说的,比如说事务切面,缓存切面,日志切面,是对一类功能增强的描述.


是切入点和通知(引介)的结合
* 定义那个方法需要被怎样增强

连接点(Joinpoint)

所有接口中的方法就是连接点(没没增强的就是连接点,被增强的方法也是连接点) (被代理对象中的所有方法)

Pointcut(切入点)

匹配连接点(Joinpoint)的断言。通知和一个切入点表达式关联,并在满足这个切入点的 连接点上运行(例如,当执行某个特定名称的方法时)。 切入点表达式如何和连接点匹配是AOP的核心:Spring缺 省使用AspectJ切入点语法。

被代理对象中所有被增强的方法(被增强的就是切入点)
所有切入点都是连接点,但是连接点不一定是切入点
Pointcut是对一类的Joinpoint的集合

切入点是拦截哪些类的哪些方法.

Advice(通知/增强)

拦截到 Joinpoint 之后所要做的事情,及增强代码。

增强部分的代码块(也可以想成是抽取出来的重复性的代码,比如加事务,事务就是通知)
增强的类就是通知类,里面就是增强方法

引入(Introduction)

也被称为内部类型声明(inter-type declaration))。声明额外的方法或者某个类 型的字段。 Spring允许引入新的接口(以及一个对应的实现)到任何被代理的对象。例如,你可以使用一个引入来 使bean实现 IsModified 接口,以便简化缓存机制。

引介是一种特殊的增强,它为类添加一些属性和方法。这样,即使一个业务类原本没有实现某个接口,通过AOP的引介功能,我们可以动态地为该业务类添加接口的实现逻辑,让业务类成为这个接口的实现类。
引介(不用)
引入其它东西, 需要运行期的字节码增强 (一般开发中用不到)

目标对象(Target Object)

被一个或者多个切面(aspect)所通知(advise)的对象。也有人把它叫做 被通 知(advised) 对象。 既然Spring AOP是通过运行时代理实现的,这个对象永远是一个 被代理(proxied) 对 象。 , 目标类,需要被代理的类

增强逻辑的织入目标类。如果没有AOP,目标业务类需要自己实现所有逻辑,而在AOP的帮助下,目标业务类只实现那些非横切逻辑的程序逻辑,而性能监视和事务管理等这些横切逻辑则可以使用AOP动态织入到特定的连接点上

织入

比如给方法加事务,, 把增强的代码加进来就是织入(涉及事务的代码)
用事务来举例介绍下面通知
前置通知:进入方法之前执行的代码块(比如开启事务)
后置通知:进入方法之后得到返回值执行的代码块(比如提交事务)
异常通知:抛出异常的时候执行的代码块(比如回滚事务)
最终通知:finally中执行的代码块(比如释放资源)

环绕通知 :环绕是靠代码指定什么时候执行, 环绕通知在Spring的另一种AOP写法.
写法上和上面不一样,比较特殊,就是把通知配到java代码里面了,
但是声明还需要在xml或者用注解声明有环绕通知
需要注意环绕通知和上面的四种通知有冲突,两种不能同时存在.
只能选一种,要么用环绕通知, 要么用上面的四种通知

AOP代理(AOP Proxy): AOP框架创建的对象,用来实现切面契约(aspect contract)(包括通知方法执行等功 能)。 在Spring中,AOP代理可以是JDK动态代理或者CGLIB代理。 注意:Spring 2.0最新引入的基于模式
(schema-based)风格和@AspectJ注解风格的切面声明,对于使用这些风格的用户来说,代理的创建是透明的。
织入(Weaving):把切面(aspect)连接到其它的应用程序类型或者对象上,并创建一个被通知(advised)的对 象。 这些可以在编译时(例如使用AspectJ编译器),类加载时和运行时完成。 Spring和其他纯Java AOP框架一 样,在运行时完成织入。

image.png