SpringBoot:通过AOP+注解优雅实现操作日志记录

在开发过程中,我们经常需要记录用户的操作日志,例如用户的登录、新增、修改、删除等操作。为了更加优雅地实现操作日志记录,我们可以借助Spring Boot的AOP和注解来实现。

首先,我们需要创建一个注解@Log,用来声明哪些方法需要记录操作日志。可以在类级别或者方法级别使用该注解。例如:

java 复制代码
@Log("新增用户") // 在方法上使用注解
@PostMapping("/users")
public User createUser(@RequestBody User user) {
    // 创建用户逻辑
}

接下来,我们需要创建一个切面类LogAspect,用来处理@Log注解的逻辑。在切面类中,我们可以获取到方法的参数、返回值等信息,进而记录对应的操作日志。

java 复制代码
@Aspect
@Component
public class LogAspect {

    @Autowired
    private LogService logService;

    @Pointcut("@annotation(com.example.demo.annotation.Log)")
    public void logPointCut() {
    }

    @AfterReturning(pointcut = "logPointCut()", returning = "returnValue")
    public void afterReturning(JoinPoint joinPoint, Object returnValue) {
        // 获取方法的参数、返回值等信息
        String methodName = joinPoint.getSignature().getName();
        Object[] args = joinPoint.getArgs();
        // ...
        // 记录操作日志
        Log log = joinPoint.getMethod().getAnnotation(Log.class);
        logService.saveLog(log.value(), methodName, args, returnValue);
    }
}

在切面类中,我们使用@Pointcut注解来声明@Log注解的切入点,使用@AfterReturning注解来处理方法执行完毕后的逻辑。在afterReturning方法中,我们可以通过joinPoint参数获取到方法的相关信息,并调用logService来保存操作日志。

最后,我们需要定义一个LogService来实现将操作日志保存到数据库或者其他日志存储方式。

java 复制代码
@Service
public class LogService {

    public void saveLog(String action, String methodName, Object[] args, Object returnValue) {
        // 将操作日志保存到数据库或者其他日志存储方式
    }
}

通过以上步骤,我们就可以实现通过AOP+注解优雅地实现操作日志记录了。在需要记录操作日志的方法上添加@Log注解,就可以自动记录对应的操作日志了。

相关推荐
Mr__Miss1 分钟前
Java 随机数生成器选型指南:Random、ThreadLocalRandom 与 SecureRandom
java·开发语言·python
Wang's Blog6 分钟前
Go-Zero基础入门5: 探究go-zero如何基于gRPC扩展客户端
开发语言·后端·golang·go-zero
CTA量化套保19 分钟前
2026年下半年Python量化入门,先看API如何接进小流程
人工智能·python
小堂子这厢有礼了22 分钟前
Chet.QuartzNet.UI v2.3.0 大更新!表格重构 + 系统配置 + 分析页全面升级!
前端·后端·ui·重构·c#·vue
薛定猫AI24 分钟前
【深度解析】动态多智能体团队:并行规划、开发与验证的 Python 实战
大数据·开发语言·python
cfm_291426 分钟前
SpringBoot自定义Starter
java·spring boot·后端
触底反弹28 分钟前
⚡ Promise.all 性能优化:让 Agent 的工具调用飞起来
javascript·人工智能·后端
霸道流氓气质31 分钟前
Windows 本地搭建 CDC 全链路测试环境(Kafka+Canel+binlog+SpringBoot)
windows·spring boot·kafka
程序员爱钓鱼33 分钟前
Rust 控制流 if 详解:条件判断与 if 表达式
前端·后端·rust
Demon_Hao40 分钟前
Spring Boot 4、JDK 25 与 GraalVM:Java 云原生进化,能否撼动 Go 的地位?
java·spring boot·云原生