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