11.1.1 AOP copcepts

让我们定义一些核心AOP术语和技术开始。这些东西不是Spring特有的... 不幸的是,AOP技术不是特别直观;然而,这将会使你更加困惑如果Spring使用其自身的术语。

  • Aspect : 穿越多个类的关注点的模块。事务管理是一个在Java商业程序中跨越关注点的好例子。在Spring AOP中,使用常规的class来实现切面(基于约束)或用@Aspect注解标注的常规类(@AspectJ风格)

  • Join point:执行一个程序时的点,例如执行一个方法或处理异常。在Spring AOP,一个连接点永远表示一个方法的执行

  • Advice: 一个方面在某个特定连接点上所采取的动作。不同类型的通知包括:“around", "before”, "after"通知(通知类型会在下面被讨论)。许多AOP框架,包括Spring,把一个通知作为拦截器,管理一个包围连接点的拦截器链。

  • Pointcut:断言匹配到连接点。通知与一个切点表达式关联,通过切点通知可以在任何的连接点执行(例如,一个确定名子的方法的执行)由切点表达式匹配连接点是AOP的核心概念,Spring默认使用AspectJ切点表达式语言

  • Introduction
  • Target object : 被一个或多个切面通知的对象。也被称作被通知对象。因为Spring AOP是使用运行时代理实现的,此对象将永远是一个被代理的对象。
  • AOP proxy:一个由AOP框架创建的实现切面合同的(通知方法的执行等)对象。在Spring框架,一个AOP代理将会是JDK的动态代理类或CGLIB代理
  • Weaving:把其他的应用类型或对象连接切面来创建一个通知对象。这可以在编译期做到(使用AspectJ编译),加载时间,运行时间。Spring AOP ,像其他的纯Java AOP框架一样,在运行时织入

通知类型

  • Before advice: 在连接点之前执行的通知,但是没有阻止接下来继续处理连接点的能力(除非他抛出一个异常)
//这样抛出异常会限制连接点方法的执行
@Before(value = "execution(public * com4.comp.SayHello3.sayHello(..))")
public void sayHello3Before() {
    throw new NullPointerException();
}
  • After returning advice:在连接点完全正常执行成功之后要执行的通知:例如,如果一个方法正常返回没有抛出异常。
  • After throwing advice: 如果一个方法通过抛出异常的方式退出要执行的通知
  • After(finally)advice : 要被执行的通知忽视方法的退出方式(正常或异常返回)
  • Around advice: 包围一个连接点(例如一个方法的调用)的通知。这是最强大的一种通知之一。环绕通知可以自定义方法调用之前和之后的行为。它也有能力选择是否继承处理连接点或返回该连接点原本返回的值还是抛出一个异常

环绕通知是最普通的通知的一种,自Spring AOP, 像AspectJ, 提供全范围的通知类型,我们建议你使用最小影响的通知类型可以提升请求的性能。例如,如果你仅需要更新方法返回的值的缓存,你最好实现一个after returing通知而不是环绕通知,仅管一个环绕通知可以完成同样的事情。使用最合式的通知可以提供简单的编程模式减少潜在的错误。例如,你不需要调用around advice 的JoinPoint.proceed()方法,因此调用他不会失败。

在Spring2.0 所有通知类型参数的都是类型严格的,因此你应该正确的处理合适的通知参数类型(例如方法执行返回的类型)而不是Object 数组。

连接点的概念,由切点匹配。 是AOP区分仅提供拦截的老技术的主要点。切点使通知独立于面向对象的继承体系。例如,一个提供声明性事物的环绕通知可适用于一系列的方法(例如所有商业操作的服务层)

results matching ""

    No results matching ""