0%

Spring学习笔记 - Spring AOP 概述

AOP中涉及的概念

  • Joinpoint

    在系统运行之前,AOP的功能模块都需要植入到OOP的功能模块中。所以,要进行这些植入过程,我们需要知道再系统的哪些执行点上进行织入操作,这些将要在其之上进行植入操作的系统执行点就称之为Joinpoint。

  • Pointcut

    Pointcut概念代表的是Joinpoint的表述方式。将横切逻辑织入当前系统的过程中,需要参照Pointcut规定的Joinpoint信息,才可以知道应该往系统的哪些Joinpoint上织入横切逻辑。

  • Advice

    Advice是单一横切关注点逻辑的载体,它代表将会织入到Joinpoint的横切逻辑。

  • Aspect

    Aspect是对系统中的横切关注点逻辑进行模块化封装的AOP概念实体。通常情况下,Aspect可以包含多个Pointcut以及相关的Advice定义。

  • 织入和织入器

    织入(Weaving)的过程就是将横切逻辑融合到原系统中的过程。只有经过织入过程以后,以Aspect模块话的横切关注点才会集成到OOP的现存系统中。完成织入过程的“人”就称之为织入器(Weaver)。

  • 目标对象

    符合Pointcut所指定的条件,将在织入过程中被织入横切逻辑的对象,称之为目标对象(Target Object)。

Java 平台上的AOP实现机制

  • 动态代理

    JDK 1.3之后,引入了动态代理(Dynamic Proxy)机制,可以在运行期间,为响应的接口(Interface)动态生成对应的代理对象。所以,我们可以将横切关注点逻辑封装到动态代理的InvocationHandler中,然后在系统的运行期间,根据横切关注点需要织入的模块位置,将横切逻辑织入到相应的代理类中。

  • 动态字节码增强

    我们知道,我们可以可以使用CGLIB等类似的动态字节码增强的工具库,在程序运行期间动态构建字节码class文件。这样我们可以为需要织入横切逻辑的模块类在运行期间通过动态字节码增强技术为这些系统模块类生成相应的子类,将横切逻辑假如到这些子类中。

  • Java代码生成

    这种方式比较古老,不做了解。

  • 自定义类加载器

    所有的Java程序的class都要通过相应的类加载器(Classloader)加载到Java虚拟机之后才能运行。

    所以我们可以通过自定义类加载器,在class文件加载到虚拟机的解析过程中,将横切逻辑织入到class文件中来达到目的。

  • AOL扩展

    此处暂时略过,该方式我也不太了解。

Spring AOP 的实现机制

Spring AOP 采用了动态代理机制和动态字节码增强技术来实现。

Spring AOP 相关笔记

Spring学习笔记 - Spring AOP 概述

Spring学习笔记 - Spring AOP 使用