1.7 Spring AOP

简介: AOP的概念AOP(Aspect-Oriented Programming),即面向切面编程。AOP采取横向抽取机制,即将分散在各个方法中的重复代码提取出来,然后在程序编译或运行阶段,将这些抽取出来的代码应用到需要执行的地方。AOP把程序分为核心业务逻辑和非核心的公共服务,AOP的关注点是非核心的公共服务,主要处理日志记录、性能统计、安全控制、事务处理、异常处理等功能。AOP面向切面编程的优势。

 1. AOP概述

    • AOP的概念

    AOP(Aspect-Oriented Programming),即面向切面编程。

    AOP采取横向抽取机制,即将分散在各个方法中的重复代码提取出来,然后在程序编译或运行阶段,将这些抽取出来的代码应用到需要执行的地方。

    AOP把程序分为核心业务逻辑和非核心的公共服务,AOP的关注点是非核心的公共服务,主要处理日志记录、性能统计、安全控制、事务处理、异常处理等功能。

      • AOP面向切面编程的优势

      由学生信息管理系统可知,新增学生信息、更新学生信息和删除学生信息的方法体中都包含日志记录的业务逻辑,这就带来了一定数量的重复代码并使程序的维护成本增加。

      基于AOP的面向切面编程,可以为此类问题提供解决方案,AOP可以将日志记录的业务逻辑从这三个方法体中抽取到一个可重用的模块,进而降低横向业务逻辑之间的耦合,减少重复代码。

      AOP的使用,使开发人员在编写业务逻辑时可以专心于核心业务,而不用过多的关注非核心的公共服务。这样对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发效率。

        • AOP与OOP关系

        AOP与OOP相辅相成,AOP提供了与 OOP 不同的抽象软件结构的视角,在OOP中以类作为程序的基本单元,而AOP中的基本单元是Aspect(切面)。

        2. AOP术语

        AOP常见术语有切面、连接点、切入点、通知(增强)等。

        术语名称

        说明

        切面

        切面是指关注点形成的类(关注点是指类中重复的代码),通常是指封装的、用于横向插入系统的功能类(如事务管理、日志记录等)。

        连接点

        连接点是程序执行过程中某个特定的节点,例如,某方法调用时或处理异常时。在Spring AOP中,一个连接点通常是一个方法的执行。

        切入点

        当某个连接点满足预先指定的条件时,AOP就能够定位到这个连接点,在连接点处插入切面,该连接点也就变成了切入点(实际被真正增强的方法)。

        通知(增强)

        通知/增强处理就是插入的切面程序代码。可以将通知/增强处理理解为切面中的方法,它是切面的具体实现。

        切面、连接点和切入点的关系如下图所示。


        3. AspectJ概述

        AspectJ是独立的AOP框架,Spring框架可基于AspectJ实现AOP操作。

          • 通知类型

          通知类型

          说明

          前置通知

          前置通知是在目标方法执行前实施增强。

          后置返回通知

          后置返回通知是在目标方法成功执行后实施增强。

          环绕通知

          环绕通知是在目标方法执行前和执行后实施增强。

          异常通知

          异常通知是在目标方法抛出异常后实施增强。

          后置(最终)通知

          后置(最终)通知是在目标方法执行后实施增强,与后置返回通知不同的是,不管是否发生异常都要执行该通知。

            • AspectJ注解

            注解名称

            注解说明

            @Aspect

            用于定义一个切面,注解在切面类上。

            @Pointcut

            用于定义切入点表达式。

            @Before

            用于定义前置通知。

            @AfterReturning

            用于定义后置返回通知。

            @Around

            用于定义环绕通知。

            @AfterThrowing

            用于定义异常通知。

            @After

            用于定义后置(最终)通知。

              • 切入点表达式


              4. OOP方式实现日志记录案例

              采用OOP的面向对象编程方式,对学生信息管理系统中的新增学生信息、更新学生信息和删除学生信息3个方法实现日志记录业务。

              案例实现详见链接:案例07 OOP方式实现日志记录案例

              5. AOP方式实现日志记录案例

              采用AOP的面向切面编程方式,对学生信息管理系统中的新增学生信息、更新学生信息和删除学生信息3个方法实现日志记录业务。

              案例实现详见链接:案例08 AOP方式实现日志记录案例

              相关实践学习
              日志服务之使用Nginx模式采集日志
              本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
              目录
              相关文章
              |
              2天前
              |
              XML 监控 安全
              Spring特性之一——AOP面向切面编程
              Spring特性之一——AOP面向切面编程
              15 1
              |
              2天前
              |
              运维 Java 程序员
              Spring5深入浅出篇:基于注解实现的AOP
              # Spring5 AOP 深入理解:注解实现 本文介绍了基于注解的AOP编程步骤,包括原始对象、额外功能、切点和组装切面。步骤1-3旨在构建切面,与传统AOP相似。示例代码展示了如何使用`@Around`定义切面和执行逻辑。配置中,通过`@Aspect`和`@Around`注解定义切点,并在Spring配置中启用AOP自动代理。 进一步讨论了切点复用,避免重复代码以提高代码维护性。通过`@Pointcut`定义通用切点表达式,然后在多个通知中引用。此外,解释了AOP底层实现的两种动态代理方式:JDK动态代理和Cglib字节码增强,默认使用JDK,可通过配置切换到Cglib
              |
              2天前
              |
              JSON 前端开发 Java
              【JavaEE】Spring全家桶实现AOP-统一处理
              【JavaEE】Spring全家桶实现AOP-统一处理
              5 0
              |
              2天前
              |
              前端开发 Java 开发者
              【JavaEE】面向切面编程AOP是什么-Spring AOP框架的基本使用
              【JavaEE】面向切面编程AOP是什么-Spring AOP框架的基本使用
              8 0
              |
              2天前
              |
              Java Spring 容器
              Spring AOP浅谈
              Spring AOP浅谈
              10 1
              |
              2天前
              |
              XML Java 数据格式
              Spring高手之路18——从XML配置角度理解Spring AOP
              本文是全面解析面向切面编程的实践指南。通过深入讲解切面、连接点、通知等关键概念,以及通过XML配置实现Spring AOP的步骤。
              22 6
              Spring高手之路18——从XML配置角度理解Spring AOP
              |
              2天前
              |
              XML Java 数据格式
              Spring使用AOP 的其他方式
              Spring使用AOP 的其他方式
              16 2
              |
              2天前
              |
              XML Java 数据格式
              Spring 项目如何使用AOP
              Spring 项目如何使用AOP
              23 2
              |
              2天前
              |
              Java 开发者 Spring
              Spring AOP的切点是通过使用AspectJ的切点表达式语言来定义的。
              【5月更文挑战第1天】Spring AOP的切点是通过使用AspectJ的切点表达式语言来定义的。
              25 5
              |
              2天前
              |
              XML Java 数据格式
              Spring AOP
              【5月更文挑战第1天】Spring AOP
              28 5