8.4.3 AOP的基本概念

8.4.3 AOP的基本概念

AOP从程序运行角度考虑程序的流程,提取业务处理过程的切面。AOP面向的是程序运行中各个步骤,希望以更好的方式来组合业务处理的各个步骤。

AOP框架特性

AOP框架并不与特定的代码耦合,AOP框架能处理程序执行中特定的切入点( Pointcut),而不与某个具体类耦合。AOP框架具有如下两个特征

  1. 各步骤之间的良好隔离性。
  2. 源代码无关性。

面向切面编程的一些术语

下面是关于面向切面编程的一些术语。

术语 描述
切面Aspect 切面用于组织多个Advice, Advice放在切面中定义。
连接点Joinpoint 程序执行过程中明确的点,如方法的调用,或者异常的抛出。在Spring AOP中,连接点总是方法的调用。
增强处理Advice AOP框架在特定的切入点执行的增强处理。处理有"around""before""after"等类型
术语 描述
切入点Pointcut 可以插入增强处理的连接点。简而言之,当某个连接点满足指定要求时,该连接点将被添加增强处理,该连接点也就变成了切入点。
例如如下代码:
1
2
pointcut xxxPointcut()
:execution(void H*.say*())

每个方法被调用都只是连接点,但如果该方法属于H开头的类,且方法名以say开头,则该方法的执行将变成切入点。如何使用表达式来定义切入点是AOP的核心, Spring默认使用Aspect切入点语法

术语 描述
引入 将方法或字段添加到被处理的类中。 Spring允许将新的接口引入到任何被处理的对象中。例如,你可以使用一个引入,使任何对象实现IsModified接口,以此来简化缓存。
目标对象 AOP框架进行增强处理的对象,也被称为被增强的对象。如果AOP框架采用的是动态AOP实现,那么该对象就是一个被代理的对象.
AOP代理 AOP框架创建的对象,简单地说,代理就是对目标对象的加强Spring中的AOP代理可以是JDK动态代理,也可以是cglib代理。
织入Weaving 将增强处理添加到目标对象中,并创建一个被增强的对象的过程就是织入。织入有两种实现方式—编译时增强(如AspectJ)和运行时增强(如Spring AOP)。Spring和其他纯Java AOP框架一样,在运行时完成织入

由前面的介绍知道,AOP代理就是由AOP框架动态生成的一个对象,该对象可作为目标对象使用AOP代理包含了目标对象的全部方法,但AOP代理中的方法与目标对象的方法存在差异:AOP方法在特定切入点添加了增强处理,并回调了目标对象的方法。
AOP代理所包含的方法与目标对象的方法示意图如图8.9所示。
这里有一张图片