Springboot AOP

在Spring Boot中,你可以使用AspectJ来创建一个AOP切面,以便在方法执行前后获取参数和返回值。以下是一个简单的例子:

首先,添加依赖到你的pom.xml

复制代码
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-aop</artifactId>
</dependency>

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.springframework.stereotype.Component;
 
@Aspect
@Component
public class LoggingAspect {
 
    @Before("execution(* com.yourpackage..*.*(..))") // 替换为你的包路径
    public void logBefore(JoinPoint joinPoint) {
        Object[] args = joinPoint.getArgs();
        // 打印参数
        for (Object arg : args) {
            System.out.println("参数: " + arg);
        }
    }
 
    @AfterReturning(pointcut="execution(* com.yourpackage..*.*(..))", returning="result") // 替换为你的包路径
    public void logAfterReturning(Object result) {
        // 打印返回值
        System.out.println("返回值: " + result);
    }
}

在Spring Boot中使用AOP来拦截指定的方法,你需要定义一个切面(Aspect),并且在切面中定义一个通知(Advice),比如前置通知(@Before),来拦截特定的方法。

以下是一个简单的例子,假设我们要拦截所有Service层的save方法。

复制代码
// 定义切点,匹配Service层的save方法
    @Pointcut("execution(* com.yourpackage..service.*.save(..))")
    public void saveMethodPointcut() {
    }
 
    // 前置通知,在save方法执行前执行
    @Before("saveMethodPointcut()")
    public void beforeSave(JoinPoint joinPoint) {
        System.out.println("Before save method: " + joinPoint.getSignature());
    }
}
相关推荐
苍何18 小时前
万字保姆级教程:Hermes+Kimi K2.6 打造7x24h Agent军团
后端
我叫黑大帅18 小时前
为什么map查找时间复杂度是O(1)?
后端·算法·面试
aq553560019 小时前
编程语言三巨头:汇编、C++与PHP大比拼
java·开发语言
我是无敌小恐龙20 小时前
Java SE 零基础入门Day01 超详细笔记(开发前言+环境搭建+基础语法)
java·开发语言·人工智能·opencv·spring·机器学习
FreeCultureBoy20 小时前
用 phpbrew 管理 php 环境:从安装到多版本切换
后端·php
FreeCultureBoy20 小时前
用 jenv 管理 Java 环境:从安装 JDK 到多版本切换
后端
心态与习惯20 小时前
Julia 初探,及与 C++,Java,Python 的比较
java·c++·python·julia·比较
IT_陈寒20 小时前
Vite的热更新突然失效,原来是因为这个配置
前端·人工智能·后端
考虑考虑20 小时前
SQL语句中的order by可能造成时间重复
数据库·后端·mysql
一叶飘零_sweeeet20 小时前
优秀文章合集
java