1、AOP的基本介绍

AOP是Aspect Oriented Programming,即面向切面编程。AOP是OOP(面向对象编程)的延续,利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。

AOP 要达到的效果是,保证开发者在不修改源代码的前提下,去为系统中的业务组件添加某种通用功能。AOP 的本质是由 AOP 框架修改业务组件的多个方法的源代码。

AOP 底层使用动态代理实现。

按照 AOP 框架修改源代码的时机,可以将其分为两类:

  • 静态 AOP 实现, AOP 框架在编译阶段对程序源代码进行修改,生成了静态的 AOP 代理类(生成的 *.class 文件已经被改掉了,需要使用特定的编译器),比如 AspectJ。
  • 动态 AOP 实现, AOP 框架在运行阶段对动态生成代理对象(在内存中以 JDK 动态代理,或 CGlib 动态地生成 AOP 代理类),如 SpringAOP。

 

2、AOP 术语

AOP 领域中的特性术语:

  • 通知(Advice,增强): 通知描述了切面何时执行以及如何执行增强处理。(比如给类中的某个方法进行了添加了一些额外的操作,这些额外操作就是增强)
  • 连接点(join point): 应用执行过程中能够插入切面的一个点,这个点可以是方法的调用、异常的抛出。在 Spring AOP 中,连接点总是方法的调用,即哪些方法可以被增强,这些方法就可以称之为一个连接点。
  • 切入点(PointCut): 可以插入增强处理的连接点。实际被真正增强了的方法,称为切入点。(连接点都可被增强,但实际应用可能只增强了类中的某个方法,则该方法就被称为切入点)
  • 切面(Aspect): 切面是通知和切点的结合。把通知(增强)应用到切入点的过程就称为切面。
  • 引入(Introduction):引入允许我们向现有的类添加新的方法或者属性。
  • 织入(Weaving): 将增强处理添加到目标对象中,并创建一个被增强的对象,这个过程就是织入。

 

通知(增强)有五种类型:

  1. 前置通知
  2. 后置通知
  3. 环绕通知
  4. 异常通知
  5. 最终通知