使用Spring Boot AOP实现日志记录

这篇具有很好参考价值的文章主要介绍了使用Spring Boot AOP实现日志记录。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

介绍

1.1 什么是AOP

1.2 AOP体系与概念

AOP简单实现

2.1 新建一个SpringBoot项目,无需选择依赖

2.2 设置好本地Maven配置后,在pom.xml文件里添加添加maven依赖

2.3 创建一个业务类接口

2.4 在实体类实现接口业务 

2.5 在单元测试运行结果

2.6 创建切面类

2.7 再次运行测试

 总结


介绍

1.1 什么是AOP

        AOP(Aspect Oriented Programming),面向切面思想,是Spring的三大核心思想之一(两外两个:IOC-控制反转、DI-依赖注入)。

        那么AOP为何那么重要呢?

        在我们的程序中,经常存在一些系统性的需求,比如权限校验、日志记录、统计等,这些代码会散落穿插在各个业务逻辑中,例如下面这个示意图:

使用Spring Boot AOP实现日志记录,java,开发语言

 

        有多少业务操作,就要写多少重复的校验和日志记录代码,这显然是无法接受的。当然,用面向对象的思想,我们可以把这些重复的代码抽离出来,写成公共方法,就是下面这样:

使用Spring Boot AOP实现日志记录,java,开发语言

 

        这样,代码冗余和可维护性的问题得到了解决,但每个业务方法中依然要依次手动调用这些公共方法,也是略显繁琐。有没有更好的方式呢?有的,为了解决这个问题,面向切面编程(AOP)应运而生。AOP将权限校验、日志记录等非业务代码完全提取出来,与业务代码分离,并寻找节点切入业务代码中:

使用Spring Boot AOP实现日志记录,java,开发语言

 

      AOP通过预编译方式和运行动态代理实现程序功能的统一维护,AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生泛型。利用AOP可以对业务逻辑的各部分进行隔离,是开发人员在编写业务逻辑时,专注核心业务,从而降低业务逻辑各模块之间的耦合度,提高代码重用和开发效率。  

        AOP使用横向抽取机制,取代纵向集成体系的重复代码建设。使用Aspect,使业务逻辑只关注业务本身,将日志管理、事务处理、性能统计、异常处理、权限控制等代码从业务逻辑代码中抽离,从而实现改变这些行为的时候不影响业务逻辑代码。

1.2 AOP体系与概念


Spring AOP和AspectJ

        目前流行的AOP框架分别为Spring AOP和AspectJ。

使用Spring Boot AOP实现日志记录,java,开发语言

AOP相关术语

使用Spring Boot AOP实现日志记录,java,开发语言


简单地去理解,其实AOP要做三类事:

  • 在哪里切入,也就是权限校验等非业务操作在哪些业务代码中执行。

  • 在什么时候切入,是业务代码执行前还是执行后。

  • 切入后做什么事,比如做权限校验、日志记录等。

因此,AOP的体系可以梳理为下图:

使用Spring Boot AOP实现日志记录,java,开发语言

 

AOP简单实现

        下面我们通过一个简单的案例来演示一下AOP的初级应用:

2.1 新建一个SpringBoot项目,无需选择依赖

使用Spring Boot AOP实现日志记录,java,开发语言

使用Spring Boot AOP实现日志记录,java,开发语言

2.2 设置好本地Maven配置后,在pom.xml文件里添加添加maven依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-aop</artifactId>
</dependency>

2.3 创建一个业务类接口

         如图,建立对应的软件包和接口,并在接口创建方法:

使用Spring Boot AOP实现日志记录,java,开发语言

2.4 在实体类实现接口业务 

        注意,一定要添加Service注解 

使用Spring Boot AOP实现日志记录,java,开发语言

2.5 在单元测试运行结果

使用Spring Boot AOP实现日志记录,java,开发语言

使用Spring Boot AOP实现日志记录,java,开发语言

2.6 创建切面类

使用Spring Boot AOP实现日志记录,java,开发语言

使用Spring Boot AOP实现日志记录,java,开发语言

使用Spring Boot AOP实现日志记录,java,开发语言

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.springframework.stereotype.Component;

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.StringJoiner;

@Component
@Aspect
public class LogAspect {
    @Before("execution(* com.example.aopdemo.service..*.*(..))")
    public void sysLog(JoinPoint jp){
        StringJoiner log = new StringJoiner("|","{","}");
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyy-MM-dd HH:mm:ss");
        log.add(formatter.format(LocalDateTime.now()));

        //当前执行的业务方法名称
        String methodName = jp.getSignature().getName();
        log.add(methodName);

        //方法的参数
        Object[] args = jp.getArgs();
        for(Object arg:args){
            log.add(arg == null ? "-" : arg.toString() );
        }

        System.out.println("AOP日志启动!" + log);
    }

2.7 再次运行测试

        再次运行就发发现我们的日志已经添加进去了,并且没有对原代码进行改变,这就是AOP的丝滑之处。

使用Spring Boot AOP实现日志记录,java,开发语言

 总结

        AOP使用横向抽取机制,取代纵向集成体系的重复代码建设。使用Aspect,使业务逻辑只关注业务本身,将日志管理、事务处理、性能统计、异常处理、权限控制等代码从业务逻辑代码中抽离,从而实现改变这些行为的时候不影响业务逻辑代码。实乃开发必备之神器也,本文到此就结束了,希望大家可以有所收获~文章来源地址https://www.toymoban.com/news/detail-619726.html

到了这里,关于使用Spring Boot AOP实现日志记录的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java使用Aop实现用户操作日志记录(新手入门)

    导入打印日志,aop,hutool,的依赖,Hutool是一个Java工具包,里面封装了大量的常用工具类,到时候咱们就通过这个工具包中有一个工具类可以用来获取客户端IP地址。 自定义操作类型枚举类 因为基本是增删改查四个方法 自定义用来记录用户操作日志的注解 写一个方法加上我

    2024年02月06日
    浏览(32)
  • Spring Boot入门(23):基于AOP实现自定义注解拦截接口日志并保存入库 | 超级详细,建议收藏

            在上两期中,我们着重介绍了如何集成使用 Logback 与 log4j2 日志框架的使用,今天我们讲解的主题依旧跟日志有关,不过不是使用何种开源框架,而是自己动手造。         Spring的核心之一AOP;AOP翻译过来叫面向切面编程, 核心就是这个切面. 切面表示从业务逻辑中

    2024年02月11日
    浏览(35)
  • Spring Boot 如何使用 JUL 进行日志记录

    在 Spring Boot 中,我们可以使用多种日志框架进行日志记录。其中,JUL (Java Util Logging) 是 Java 平台自带的日志框架,它提供了简单的 API 和配置,可以轻松地进行日志记录。本文将介绍如何在 Spring Boot 中使用 JUL 进行日志记录,并提供示例代码。 默认情况下,Spring Boot 使用 L

    2024年02月10日
    浏览(37)
  • 【Spring Boot】通过AOP拦截Spring Boot日志并将其存入数据库

    在软件开发中,常常需要记录系统运行时的日志。日志记录有助于排查系统问题、优化系统性能、监控操作行为等。本文将介绍如何使用Spring Boot和AOP技术实现拦截系统日志并保存到数据库中的功能。 本文将通过以下步骤实现拦截系统日志并保存到数据库中的功能: 配置数据

    2024年02月10日
    浏览(33)
  • spring boot 使用AOP实现是否已登录检测

            前后端分离的开发中,用户http请求应用服务的接口时, 如果要求检测该用户是否已登录。可以实现的方法有多种, 本示例是通过aop 的方式实现,简单有效。         约定:前端http的post 请求 1、在pom.xml 引用 2、创建插入标记 3、实现切入类 4 建立api接口,在需要检

    2024年02月20日
    浏览(28)
  • Spring Boot 自定义注解,AOP 切面统一打印出入参请求日志

    今天主要说说如何通过自定义注解的方式,在 Spring Boot 中来实现 AOP 切面统一打印出入参日志。小伙伴们可以收藏一波。 废话不多说,进入正题! 在看看实现方法之前,我们先看下切面日志输出效果咋样: 从上图中可以看到,每个对于每个请求,开始与结束一目了然,并且

    2024年02月08日
    浏览(36)
  • AOP实现日志记录

    AOP实现日志记录 自定义注解方式 实现 1、总体图 2、注解类SystemLog SystemLog 3、切面类LogAspect handleBefore 在 请求执行之前 执行这个方法 handleAfter 在 请求执行之后 执行这个方法 LogAspect 4、测试 运行项目,访问 @PutMapping(“/user/userInfo”) 即可打印日志信息。 这个请求之前的日志

    2024年02月14日
    浏览(29)
  • 使用SpringBoot AOP记录操作日志和异常日志

    平时我们在做项目时经常需要对一些重要功能操作记录日志,方便以后跟踪是谁在操作此功能;我们在操作某些功 能时也有可能会发生异常,但是每次发生异常要定位原因我们都要到服务器去查询日志才能找到,而且也不能对发 生的异常进行统计,从而改进我们的项目,要

    2024年02月04日
    浏览(34)
  • 如何在 Spring Boot 中配置日志记录?

    在Spring Boot中配置日志记录是一项关键任务,因为良好的日志记录是应用程序开发和维护的必要组成部分。Spring Boot采用了一种灵活且强大的方式来管理日志,允许开发人员使用不同的日志框架,并提供了易于配置的选项。下面详细介绍在Spring Boot中配置日志记录的过程,包括

    2024年01月25日
    浏览(41)
  • JAVA:使用 Spring AOP 实现面向切面编程

    1、简述 在现代的软件开发中,面向切面编程(AOP)是一种重要的编程范式,它允许我们将横切关注点(如日志记录、性能监控、事务管理等)从应用程序的核心业务逻辑中分离出来,以提高代码的模块化和可维护性。Spring 框架提供了强大的 AOP 支持,使得我们可以轻松地实

    2024年04月13日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包