AOP面向切面编程概念整理

AOP可以实现横切关注点与它们所影响的对象之间的解耦。与AOP相关的概念有:

  • 横切关注点(crosscutting concern):在软件开发中, 散布于应用中多处的功能。如日志、声明式事务、安全、缓存,这些横切关注点从概念上是与应用的业务逻辑相分离的,但是往往会直接嵌入到应用的业务逻辑之中 。

  • 通知(advice):描述切面要完成的工作以及何时执行这个工作(什么、何时)。

    • Spring切面可以应用5种类型的通知
      1. 前置通知(Before) : 在目标方法被调用之前调用通知功能;
      2. 后置通知(After) : 在目标方法完成之后调用通知, 此时不会关心方法的输出是什么;
      3. 返回通知(After-returning) : 在目标方法成功执行之后调用通知;
      4. 异常通知(After-throwing) : 在目标方法抛出异常后调用通知;
      5. 环绕通知(Around) : 通知包裹了被通知的方法, 在被通知的方法调用之前和调用之后执行自定义的行为。
  • 连接点(join point) :在应用执行过程中能够插入切面的一个点。 这个点可以是调用方法时、 抛出异常时、 甚至修改一个字段时 。

  • 切点(pointcut) :定义了“何处”,它会匹配通知所要织入的一个或多个连接点。

  • 切面(aspect):通知和切点的结合,横切关注点被模块化成的特殊的类。

  • 引入( Introduction):允许我们向现有的类添加新方法或属性。

  • 织入( Weaving):把切面应用到目标对象并创建新的代理对象的过程。

    在目标对象的生命周期里可以进行织入的点

    1. 编译期: 切面在目标类编译时被织入。 这种方式需要特殊的编译器。 AspectJ的织入编译器就是以这种方式织入切面的。
    2. 类加载期: 切面在目标类加载到JVM时被织入。 这种方式需要特殊的类加载器(ClassLoader) , 它可以在目标类被引入应用之前增强该目标类的字节码。 AspectJ 5的加载时织入(load-time weaving, LTW) 就支持以这种方式织入切面。
    3. 运行期: 切面在应用运行的某个时刻被织入。 一般情况下, 在织入切面时, AOP容器会为目标对象动态地创建一个代理对象。Spring AOP就是以这种方式织入切面的。

你可能感兴趣的:(AOP,面向切面编程,Spring,Spring)