1.7 Spring AOP

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 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日志并进行多维度分析。
              目录
              相关文章
              |
              1月前
              |
              Java
              Spring5入门到实战------9、AOP基本概念、底层原理、JDK动态代理实现
              这篇文章是Spring5框架的实战教程,深入讲解了AOP的基本概念、如何利用动态代理实现AOP,特别是通过JDK动态代理机制在不修改源代码的情况下为业务逻辑添加新功能,降低代码耦合度,并通过具体代码示例演示了JDK动态代理的实现过程。
              Spring5入门到实战------9、AOP基本概念、底层原理、JDK动态代理实现
              |
              2月前
              |
              Java Spring
              在Spring Boot中使用AOP实现日志切面
              在Spring Boot中使用AOP实现日志切面
              |
              7天前
              |
              Java 数据库连接 数据库
              Spring基础3——AOP,事务管理
              AOP简介、入门案例、工作流程、切入点表达式、环绕通知、通知获取参数或返回值或异常、事务管理
              Spring基础3——AOP,事务管理
              |
              1月前
              |
              XML Java 数据格式
              Spring5入门到实战------11、使用XML方式实现AOP切面编程。具体代码+讲解
              这篇文章是Spring5框架的AOP切面编程教程,通过XML配置方式,详细讲解了如何创建被增强类和增强类,如何在Spring配置文件中定义切入点和切面,以及如何将增强逻辑应用到具体方法上。文章通过具体的代码示例和测试结果,展示了使用XML配置实现AOP的过程,并强调了虽然注解开发更为便捷,但掌握XML配置也是非常重要的。
              Spring5入门到实战------11、使用XML方式实现AOP切面编程。具体代码+讲解
              |
              20天前
              |
              缓存 Java 开发者
              Spring高手之路22——AOP切面类的封装与解析
              本篇文章深入解析了Spring AOP的工作机制,包括Advisor和TargetSource的构建与作用。通过详尽的源码分析和实际案例,帮助开发者全面理解AOP的核心技术,提升在实际项目中的应用能力。
              18 0
              Spring高手之路22——AOP切面类的封装与解析
              |
              1月前
              |
              安全 Java 开发者
              Java 新手入门:Spring 两大利器IoC 和 AOP,小白也能轻松理解!
              Java 新手入门:Spring 两大利器IoC 和 AOP,小白也能轻松理解!
              29 1
              |
              1月前
              |
              Java Spring
              Spring的AOP组件详解
              该文章主要介绍了Spring AOP(面向切面编程)组件的实现原理,包括Spring AOP的基础概念、动态代理模式、AOP组件的实现以及Spring选择JDK动态代理或CGLIB动态代理的依据。
              Spring的AOP组件详解
              |
              1月前
              |
              Java API Spring
              Spring Boot 中的 AOP 处理
              对 Spring Boot 中的切面 AOP 做了详细的讲解,主要介绍了 Spring Boot 中 AOP 的引入,常用注解的使用,参数的使用,以及常用 api 的介绍。AOP 在实际项目中很有用,对切面方法执行前后都可以根据具体的业务,做相应的预处理或者增强处理,同时也可以用作异常捕获处理,可以根据具体业务场景,合理去使用 AOP。
              |
              20天前
              |
              Java Spring XML
              掌握面向切面编程的秘密武器:Spring AOP 让你的代码优雅转身,横切关注点再也不是难题!
              【8月更文挑战第31天】面向切面编程(AOP)通过切面封装横切关注点,如日志记录、事务管理等,使业务逻辑更清晰。Spring AOP提供强大工具,无需在业务代码中硬编码这些功能。本文将深入探讨Spring AOP的概念、工作原理及实际应用,展示如何通过基于注解的配置创建切面,优化代码结构并提高可维护性。通过示例说明如何定义切面类、通知方法及其应用时机,实现方法调用前后的日志记录,展示AOP在分离关注点和添加新功能方面的优势。
              30 0
              |
              29天前
              |
              缓存 安全 Java
              Spring AOP 中两种代理类型的限制
              【8月更文挑战第22天】
              14 0