获取方法的入参和返回值

使用 Spring AOP 获取方法的入参和返回值

Spring AOP(面向切面编程)可以用于拦截方法调用,从而获取方法的入参和返回值。以下是详细步骤和示例代码。

1. 定义切面类

创建一个类并使用 @Aspect 注解标注它,定义拦截方法调用的切面。在切面类中,通过 JoinPoint 获取方法的入参,通过 @AfterReturning 获取方法的返回值。

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.aspectj.lang.reflect.MethodSignature;
import org.springframework.stereotype.Component;
import java.util.Arrays;

@Aspect
@Component
public class LoggingAspect {

    @Before("execution(* com.example.service.*.*(..))")
    public void logMethodEntry(JoinPoint joinPoint) {
        // 获取方法名
        String methodName = joinPoint.getSignature().getName();
        
        // 获取方法参数
        Object[] args = joinPoint.getArgs();
        
        // 获取方法签名
        MethodSignature methodSignature = (MethodSignature) joinPoint.getSignature();
        
        // 获取方法返回值类型
        Class<?> returnType = methodSignature.getReturnType();
        
        System.out.println("Method " + methodName + " called with args: " + Arrays.toString(args));
        System.out.println("Return type: " + returnType.getName());
    }

    @AfterReturning(pointcut = "execution(* com.example.service.*.*(..))", returning = "result")
    public void logMethodExit(JoinPoint joinPoint, Object result) {
        // 获取方法名
        String methodName = joinPoint.getSignature().getName();
        
        // 获取方法签名
        MethodSignature methodSignature = (MethodSignature) joinPoint.getSignature();
        
        // 获取方法返回值类型
        Class<?> returnType = methodSignature.getReturnType();
        
        System.out.println("Method " + methodName + " returned: " + result);
        System.out.println("Return type: " + returnType.getName());
    }
}

代码解释

  • @Aspect:标记这是一个切面类。
  • @Component:将切面类声明为 Spring 组件。
  • @Before:在目标方法执行之前执行,可以用来获取方法的入参。
    • joinPoint.getArgs():获取方法的参数。
    • joinPoint.getSignature().getName():获取方法名。
    • MethodSignature methodSignature = (MethodSignature) joinPoint.getSignature():获取方法签名。
    • methodSignature.getReturnType():获取方法的返回值类型。
  • @AfterReturning:在目标方法成功返回后执行,可以用来获取方法的返回值。
    • result 参数表示目标方法的返回值。

通过以上切面类,你可以在方法调用前获取方法的入参,在方法调用后获取方法的返回值及其类型。这样,你就可以在 Spring 应用中有效地记录和处理方法的入参和返回值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值