第四章 面向切面的Spring

4章 面向切面的Spring
  本章内容:
    面向切面编程的基本原理
    通过POJO创建切面
    使用@AspectJ注解
    为AspectJ切面注入依赖

4.1 定义AOP术语

通知(Advice
  Spring切面可以应用5种类型的通知:
    前置通知(Before) : 在目标方法被调用之前调用通知功能;
    后置通知(After) : 在目标方法完成之后调用通知, 此时不会关心方法的输出是什么;
    返回通知(After-returning) : 在目标方法成功执行之后调用通知;
    异常通知(After-throwing) : 在目标方法抛出异常后调用通知;
    环绕通知(Around) : 通知包裹了被通知的方法, 在被通知的方法调用之前和调用之后执行自定义的行为。

连接点(Join point

切点(Poincut

  如果说通知定义了切面的什么何时的话, 那么切点就定义了何处。 切点的定义会匹配通知所要织入的一个或多个连接点。 我们通常使用
  明确的类和方法名称, 或是利用正则表达式定义所匹配的类和方法名称来指定这些切点。 有些AOP框架允许我们创建动态的切点, 可以根据运
  行时的决策(比如方法的参数值) 来决定是否应用通知。

切面(Aspect
  切面是通知和切点的结合。 通知和切点共同定义了切面的全部内容——它是什么, 在何时和何处完成其功能。

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

织入(Weaving
  织入是把切面应用到目标对象并创建新的代理对象的过程。 切面在指定的连接点被织入到目标对象中。 在目标对象的生命周期里有多个点可以
  进行织入:
  编译期: 切面在目标类编译时被织入。 这种方式需要特殊的编译器。 AspectJ的织入编译器就是以这种方式织入切面的。
  类加载期: 切面在目标类加载到JVM时被织入。 这种方式需要特殊的类加载器(ClassLoader) , 它可以在目标类被引入应用之前增
    强该目标类的字节码。 AspectJ 5的加载时织入(load-time weavingLTW) 就支持以这种方式织入切面。
  运行期: 切面在应用运行的某个时刻被织入。 一般情况下, 在织入切面时, AOP容器会为目标对象动态地创建一个代理对象。 Spring

    AOP就是以这种方式织入切面的。

4.1.2 SpringAOP的支持 Spring提供了4种类型的AOP支持:
  基于代理的经典Spring AOP
    纯POJO切面;
    @AspectJ注解驱动的切面;
    注入式AspectJ切面(适用于Spring各版本)
前三种都是Spring AOP实现的变体, Spring AOP构建在动态代理基础之上, 因此, SpringAOP的支持局限于方法拦截。




posted @ 2018-08-03 16:30  110528844  阅读(111)  评论(0编辑  收藏  举报