8.4.3 AOP的基本概念
8.4.3 AOP的基本概念
AOP
从程序运行角度考虑程序的流程,提取业务处理过程的切面。AOP
面向的是程序运行中各个步骤,希望以更好的方式来组合业务处理的各个步骤。
AOP框架特性
AOP
框架并不与特定的代码耦合,AOP
框架能处理程序执行中特定的切入点( Pointcut)
,而不与某个具体类耦合。AOP
框架具有如下两个特征
- 各步骤之间的良好隔离性。
- 源代码无关性。
面向切面编程的一些术语
下面是关于面向切面编程的一些术语。
术语 | 描述 |
---|---|
切面Aspect |
切面用于组织多个Advice , Advice 放在切面中定义。 |
连接点Joinpoint |
程序执行过程中明确的点,如方法的调用,或者异常的抛出。在Spring AOP 中,连接点总是方法的调用。 |
增强处理Advice |
AOP 框架在特定的切入点执行的增强处理 。处理有"around" 、"before" 和"after" 等类型 |
术语 | 描述 |
---|---|
切入点Pointcut |
可以插入增强处理的连接点。简而言之,当某个连接点满足指定要求时,该连接点将被添加增强处理,该连接点也就变成了切入点。 |
例如如下代码: |
1 | pointcut xxxPointcut() |
每个方法被调用都只是连接点,但如果该方法属于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所示。