• 【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通知可以在方法调用前后执行自定义行为。它还负责选择是继续到连接点,还是通过返回它自己的返回值或抛出异常来简化建议的方法执行。

  • 相关阅读:
    C++面试题
    kalman滤波原理
    开blog
    Linux图片批处理
    Debian使用相关
    Ubuntu grub引导修复
    Debian系统vim中文显示乱码问题
    Debian配置Apache2支持mod-python和cgi模块
    linux下解压被分割的zip文件
    Ubuntu 16.04 启动错误 "a start job is running for hold until boot process finishes up"
  • 原文地址:https://www.cnblogs.com/756623607-zhang/p/11873978.html
Copyright © 2020-2023  润新知