首页 > 其他分享 >使用Spring Boot AOP和自定义注解优雅实现操作日志记录

使用Spring Boot AOP和自定义注解优雅实现操作日志记录

时间:2024-07-18 11:09:32浏览次数:15  
标签:自定义 记录 Spring Boot import AOP 注解 日志

使用Spring Boot AOP和自定义注解优雅实现操作日志记录

大家好,今天我们来聊聊如何在Spring Boot项目中,通过AOP(面向切面编程)和自定义注解,优雅地实现操作日志记录。操作日志对于系统的可维护性和安全性至关重要,它能帮助我们追踪用户行为,排查问题。

什么是AOP?

AOP,全称Aspect-Oriented Programming,面向切面编程。它允许我们将那些与业务逻辑无关的代码(如日志记录、事务管理等)从业务逻辑中分离出来,使代码更加清晰和可维护。

为什么使用AOP来记录操作日志?

  1. 解耦:将日志记录逻辑从业务代码中分离出来,减少代码耦合。
  2. 可维护:日志记录逻辑集中管理,方便维护和修改。
  3. 灵活性:可以根据需要灵活地添加或移除日志记录功能。

实现步骤

我们将通过以下几个步骤来实现操作日志记录:

  1. 创建自定义注解。
  2. 使用AOP拦截带有自定义注解的方法。
  3. 在拦截的方法中记录操作日志。

1. 创建自定义注解

首先,我们需要创建一个自定义注解,用来标记需要记录操作日志的方法。

package com.example.logging;

import java.lang.annotation.*;

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface OperationLog {
    String value() default "";
}

2. 使用AOP拦截带有自定义注解的方法

接下来,我们需要创建一个AOP切面类,拦截所有带有@OperationLog注解的方法,并记录操作日志。

package com.example.logging;

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.*;
import org.aspectj.lang.reflect.MethodSignature;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;

import java.lang.reflect.Method;

@Aspect
@Component
public class OperationLogAspect {

    private static final Logger logger = LoggerFactory.getLogger(OperationLogAspect.class);

    @Pointcut("@annotation(com.example.logging.OperationLog)")
    public void logPointCut() {
    }

    @Before("logPointCut()")
    public void doBefore(JoinPoint joinPoint) {
        // 获取方法签名
        MethodSignature signature = (MethodSignature) joinPoint.getSignature();
        Method method = signature.getMethod();

        // 获取注解
        OperationLog operationLog = method.getAnnotation(OperationLog.class);
        String operation = operationLog.value();

        // 获取方法参数
        Object[] args = joinPoint.getArgs();

        // 记录日志
        logger.info("操作日志 - 方法: {}, 操作: {}, 参数: {}", method.getName(), operation, args);
    }
}

3. 在方法上使用自定义注解

最后,我们只需要在需要记录操作日志的方法上使用@OperationLog注解即可。

package com.example.controller;

import com.example.logging.OperationLog;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class UserController {

    @OperationLog("获取用户信息")
    @GetMapping("/user")
    public String getUser() {
        // 模拟获取用户信息
        return "User Info";
    }
}

总结

通过以上步骤,我们实现了一个简单而优雅的操作日志记录功能。使用AOP和自定义注解,不仅让我们的代码更加清晰和可维护,还提高了日志记录的灵活性。

希望这篇文章对你有所帮助。如果你有任何问题或建议,欢迎在评论区留言。感谢阅读!


如果你觉得这个标题还不错,可以继续使用。如果你有其他更好的标题建议,也欢迎分享!

百万大学生都在用的AI写论文工具,篇篇无重复

标签:自定义,记录,Spring,Boot,import,AOP,注解,日志
From: https://www.cnblogs.com/zhizu/p/18309098

相关文章

  • 使用Spring Boot实现图形验证码:从零开始的详细教程
    使用SpringBoot实现图形验证码:从零开始的详细教程在现代Web应用中,图形验证码是一种常见的防止机器人和恶意攻击的手段。今天,我们将深入探讨如何在SpringBoot项目中实现图形验证码。通过这个教程,你将学会如何生成和验证图形验证码,并将其集成到你的SpringBoot应用中。一、项目......
  • SpringBoot与Thymeleaf模板技术整合
    以下是一个简单的SpringBoot整合Thymeleaf的入门案例:1.创建一个SpringBoot项目,并添加Thymeleaf依赖。org.springframework.bootspring-boot-starter-thymeleaforg.springframework.bootspring-boot-starter-web2.在src/main/resources/templates目录下创建一个HTML模......
  • Flash简介及其中的Bootloader如何实现对APP程序的下载更新或重装
    目录1.eMMC、NandFlash都属于Flash,Flash的具体类别如下2.Bootloader在APP程序下载更新或重装中存在的意义3.Bootloader下载更新或重装APP程序的思路框架4.Bootloader下载更新或重装APP程序代码实现1.eMMC、NandFlash都属于Flash,Flash的具体类别如下       ......
  • 自定义转换器
    我们要自定义转换器就要声明一个类,然后继承父类的BaseConverter需要用正则表达式的需要重写父类的regex代码实现: fromflaskimportFlaskfromwerkzeug.routingimportBaseConverterapp=Flask(__name__)classCustomConverter(BaseConverter):#自定义转换器要继承......
  • 基于java+springboot+vue的影视影院订票选座管理系统(源码+LW+部署讲解)
    前言......
  • 基于java+springboot+vue的学生毕业离校系统(源码+LW+部署讲解)
    前言......
  • 从头理清uboot(2)-启动流程分析
    从头理清uboot(2)-启动流程分析目录从头理清uboot(2)-启动流程分析1.总体流程图2.逐步分析2.1上电后执行的第一条指令2.2初始化中断向量表2.3初始化工作模式&初始化中断向量表。2.4cpu_init_cp15&cpu_init_crit2.4.1cpu_init_cp152.4.1cpu_init_crit2.5进入_main函数2.5......
  • SpringMVC:@ResponseBody注解与HttpServletResponse对象
    在SpringMVC框架中,@ResponseBody注解和HttpServletResponse对象都扮演着将处理结果发送回客户端的重要角色,但它们的使用方式和目的有所不同。@ResponseBody@ResponseBody注解用于将方法的返回值绑定到web响应体(responsebody)上。当你使用@ResponseBody注解一个方法的返回值时,Sp......
  • 【第3章】Spring Cloud之Nacos服务端权限认证
    文章目录前言一、默认控制台登录页二、鉴权1.相关参数2.服务端开启鉴权2.1开启鉴权2.2自定义密钥3.开启服务身份识别功能4.开启Token缓存功能三、效果四、用户列表总结前言上一章我们访问了控制台,这里为了安全我们开启Nacos的权限认证。一、默认控制台登录......
  • 【第4章】Spring Cloud之Nacos单机模式支持mysql
    文章目录前言一、初始化1.初始化数据库2.修改配置文件二、效果1.重新启动2.新增用户总结前言在0.7版本之前,在单机模式时nacos使用嵌入式数据库实现数据的存储,不方便观察数据存储的基本情况。0.7版本增加了支持mysql数据源能力,具体的操作步骤:安装数据库,版本要......