Spring攻略学习笔记(3.00)AOP核心概念和术语

        这篇文章翻译自Spring Framework Reference文档。

        面向方面编程 (AOP)通过提供另外一种思考程序架构的方式补充了面向对象编程 (OOP)。OOP中模块化的核心单元是类,然而AOP中模块化的核心单元是方面。方面使关注点的模块,例如事务管理,横切多个类型和对象。(在AOP文献中,这样的关注点通常被称作横切关注点)

  • 方面(Aspect: 一个关注点的一个模块,它横切多个类。事务管理是企业级Java应用程序中一个很好的横切关注点的例子。Spring AOP中,方面是使用普通类(基于schema方式)或者使用带有@Aspect注解(@AspectJ风格)的普通类来实现的。

  • 连接点(Join point): 程序执行的一个点,例如方法执行或者异常处理。Spring AOP中一个连接总是代表一个方法执行

  • 通知(Advice): 在一个特定连接点采取的行动。各种类型的通知包括“around”、“before”和“throws”通知。(通知类型将在下面讨论。)许多AOP框架,包括Spring,都是将通知模型作为一个拦截器,在连接点周围维护一个拦截器链。

  • 切入点(Pointcut): 匹配连接点的一个谓词。通知和一个切入点表达式关联,并运行在切入点匹配的任何连接点 (例如, 具有某个名称的方法的执行). 切入点表达式匹配连接点是AOP中的核心概念,并且Spring默认使用 AspectJ切入点表达式语言。

  • 引入(Introduction): 为一个类型声明额外的方法或字段。Spring AOP允许你给任何通知对象引入新的接口(以及相应的实现)。 例如,可以使用一个引入来使一个bean实现IsModified接口以便简化缓存机制。 (在AspectJ社区中,引入被看做一种类型间声明)。

  • 目标对象(Target object): 被一个或多个方面通知的对象。 也指通知对象。由于Spring AOP是通过运行时代理实现的,它永远都是一个被代理对象。

  • AOP代理(AOP proxy): AOP框架创建的一个对象以实现方面契约(通知方法执行等). 在Spring框架中, AOP代理可以是JDK动态代理或者CGLIB代理。

  • 编织(Weaving): 连接方面和其它应用程序类型或对象来创建一个通知对象。编织可以在编译期(例如,使用AspectJ编译器)、加载期或者运行期完成。Spring AOP和其它纯Java AOP框架一样在运行期完成编织。

        

  通知类型:

  • Before通知: 在连接点之前执行的通知, 它不能阻止连接点之前的执行(除非抛出异常)。

  • After returning通知: 在连接点正常完成后执行的通知:例如,一个方法正常返回,没有抛出异常。

  • After throwing通知: 在方法抛出异常退出时执行的通知。

  • After (finally) 通知: 不管连接点退出的方式(正常或者异常返回)执行的通知。

  • Around通知: 包围一个连接点的通知,如方法调用。这是功能最强大的通知。Around通知可以在方法调用前后执行自定义的行为。它也负责选择是否继续执行连接点或通过返回它自己的返回值或抛出异常来短路执行。

       Around通知是最通用的通知类型。和AspectJ一样,Spring AOP提供所有类型的通知,推荐使用最简单的通知类型来实现所需的行为。例如,如果你只需要用一个方法的返回值来更新缓存,你最好实现一个after returning通知而不是around通知,虽然around通知也能完成同样的事情。使用最具体的通知类型能够使编程模型变得更简单,并能减少潜在错误。例如,你不需要调用JoinPoint上的proceed()方法用于around通知,就从此以后调用它

        Spring 2.0中, 所有的advice参数都是静态类型, 因此你使用恰当类型(例如执行方法的返回值类型)而不是对象数组的通知参数 。

        切入点匹配连接点是AOP中的核心概念,这让它与以往仅提供拦截功能的技术区分开来。切入点使通知独立于面向对象层次结构的目标。例如,around通知提供可用于一组横跨多个对象的方法(例如所有业务操作都在服务层)的声明式的事务管理。




原文地址:https://www.cnblogs.com/javawebsoa/p/3049992.html