【Spring AOP】Spring AOP之你必须知道的AOP相关概念(1)

一、什么是AOP

  AOP(Aspect-oriented Programming)即面向切面编程,是对OOP( Object-oriented Programming)即面向对象编程的一种补充,AOP是对程序结构的另一种思考。在OOP中的核心模块单元是Class类,而AOP中的核心单元是Aspect方面。Aspect方面支持跨多个Type类型和Object对象的关注点(例如事务管理)的模块化。(在AOP文献中,这样的关注点通常被称为“横切”关注点。)。

     Spring提供了XML和@Aspect注解两种强有力的方式实现AOP。这两种风格都提供了完全类型化的advice和使用AspectJ pointcut 语言,来实现Spring AOP进行weaving编织。当然也可以通过更低级别的方式来实现,也就是通过底层API程序化实现。

   Spring中的AOP主要体现在两个方面:

    1.提供声明性企业服务。其中最重要的就是声明性事务管理。

            2.让用户自己实现自定义的Aspects方面,来实现相关AOP的功能

二、AOP相关概念

  让我们从定义一些核心的AOP概念和术语开始。这些术语不是特定于spring的。不幸的是,AOP术语不是特别直观。然而,如果Spring使用自己的术语,则会更加混乱。

1)Aspect(方面)

  跨越多个类的横切关注点。在Spring AOP,事务管理是企业Java应用程序中横切关注点的一个很好的例子。可以通过@Aspect注解来实现一个Aspect类

2)Join point (连接点)

  程序执行过程中的一个点也就是可以被拦截通知的地方,如方法的执行或异常的处理。在Spring AOP中,连接点总是表示方法执行。

3)Advice(通知)

  在特定连接点上采取的操作。有不通类型的Advice,在Spring中有5种类型分别为Before,After,AfterReturning,AfterThrowing,Around。许多AOP框架,包括Spring,将通知建模为拦截器,并维护围绕连接点的拦截器链。

4)Pointcut (切入点)

  匹配连接点的谓词。表示将通知与切入点表达式相关联,并在与切入点匹配的任何连接点上运行(例如,执行具有特定名称的方法)。连接点与切入点表达式匹配的概念是AOP的核心,Spring默认使用AspectJ切入点表达式语言。该概念的核心就是切入点表达式。

5)Introduction(介绍)

  表示在不修改这个类的情况下,增加额外的方法或字段。Spring AOP允许您将新的接口(和相应的实现)引入任何被建议的对象。例如,您可以使用一个介绍来让一个bean实现一个IsModified接口,以简化缓存。(介绍在AspectJ社区中称为类型间声明。)

6)Target object (目标对象)

  被一个或多个方面告知的对象。也称为“被通知对象”。

7)AOP proxy(AOP代理)

  为了实现通知被AOP框架创建的代理对象。在Spring框架中,AOP代理是JDK动态代理或CGLIB代理。

8)Weaving(织入)

  将方面与其他应用程序类型或对象链接以创建被通知的对象。这可以在编译时(例如,使用AspectJ编译器)、加载时或运行时完成。与其他纯Java AOP框架一样,Spring AOP在运行时执行编织。

三、通知类型介绍

1)Before advice

  在被通知对象的方法调用之前执行,但是无法阻止被通知对象的方法被调用(除非抛异常)

2)After (finally) advice
  被通知对象的方法调用完之后执行,无论被通知对象的方法以何种方式退出(正常或异常返回),都将执行通知。

3)After returning advice

  被通知对象的方法正常完成后运行并可以拿到返回结果(如果一个方法没有抛出异常并返回)。

4)After throwing advice

  如果一个方法通过抛出异常退出,则被执行

5)Around advice

    围绕连接点(如方法调用)的通知。这是最有力的建议。Around通知可以在方法调用前后执行自定义行为。它还负责选择是继续到连接点,还是通过返回它自己的返回值或抛出异常来简化建议的方法执行。

原文地址:https://www.cnblogs.com/756623607-zhang/p/11873978.html