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日志并进行多维度分析。
              目录
              相关文章
              |
              2天前
              |
              存储 安全 Java
              Spring Boot 3 集成Spring AOP实现系统日志记录
              本文介绍了如何在Spring Boot 3中集成Spring AOP实现系统日志记录功能。通过定义`SysLog`注解和配置相应的AOP切面,可以在方法执行前后自动记录日志信息,包括操作的开始时间、结束时间、请求参数、返回结果、异常信息等,并将这些信息保存到数据库中。此外,还使用了`ThreadLocal`变量来存储每个线程独立的日志数据,确保线程安全。文中还展示了项目实战中的部分代码片段,以及基于Spring Boot 3 + Vue 3构建的快速开发框架的简介与内置功能列表。此框架结合了当前主流技术栈,提供了用户管理、权限控制、接口文档自动生成等多项实用特性。
              26 8
              |
              2月前
              |
              XML Java 数据安全/隐私保护
              Spring Aop该如何使用
              本文介绍了AOP(面向切面编程)的基本概念和术语,并通过具体业务场景演示了如何在Spring框架中使用Spring AOP。文章详细解释了切面、连接点、通知、切点等关键术语,并提供了完整的示例代码,帮助读者轻松理解和应用Spring AOP。
              Spring Aop该如何使用
              |
              2月前
              |
              监控 安全 Java
              什么是AOP?如何与Spring Boot一起使用?
              什么是AOP?如何与Spring Boot一起使用?
              78 5
              |
              2月前
              |
              Java 开发者 Spring
              深入解析:Spring AOP的底层实现机制
              在现代软件开发中,Spring框架的AOP(面向切面编程)功能因其能够有效分离横切关注点(如日志记录、事务管理等)而备受青睐。本文将深入探讨Spring AOP的底层原理,揭示其如何通过动态代理技术实现方法的增强。
              81 8
              |
              2月前
              |
              Java 开发者 Spring
              Spring AOP 底层原理技术分享
              Spring AOP(面向切面编程)是Spring框架中一个强大的功能,它允许开发者在不修改业务逻辑代码的情况下,增加额外的功能,如日志记录、事务管理等。本文将深入探讨Spring AOP的底层原理,包括其核心概念、实现方式以及如何与Spring框架协同工作。
              |
              2月前
              |
              XML 监控 安全
              深入调查研究Spring AOP
              【11月更文挑战第15天】
              50 5
              |
              2月前
              |
              Java 开发者 Spring
              Spring AOP深度解析:探秘动态代理与增强逻辑
              Spring框架中的AOP(Aspect-Oriented Programming,面向切面编程)功能为开发者提供了一种强大的工具,用以将横切关注点(如日志、事务管理等)与业务逻辑分离。本文将深入探讨Spring AOP的底层原理,包括动态代理机制和增强逻辑的实现。
              51 4
              |
              3月前
              |
              存储 缓存 Java
              Spring高手之路23——AOP触发机制与代理逻辑的执行
              本篇文章深入解析了Spring AOP代理的触发机制和执行流程,从源码角度详细讲解了Bean如何被AOP代理,包括代理对象的创建、配置与执行逻辑,帮助读者全面掌握Spring AOP的核心技术。
              57 3
              Spring高手之路23——AOP触发机制与代理逻辑的执行
              |
              2月前
              |
              Java Spring
              [Spring]aop的配置与使用
              本文介绍了AOP(面向切面编程)的基本概念和核心思想。AOP是Spring框架的核心功能之一,通过动态代理在不修改原代码的情况下注入新功能。文章详细解释了连接点、切入点、通知、切面等关键概念,并列举了前置通知、后置通知、最终通知、异常通知和环绕通知五种通知类型。
              48 1
              |
              4月前
              |
              设计模式 Java 测试技术
              spring复习04,静态代理动态代理,AOP
              这篇文章讲解了Java代理模式的相关知识,包括静态代理和动态代理(JDK动态代理和CGLIB),以及AOP(面向切面编程)的概念和在Spring框架中的应用。文章还提供了详细的示例代码,演示了如何使用Spring AOP进行方法增强和代理对象的创建。
              spring复习04,静态代理动态代理,AOP
              下一篇
              开通oss服务