使用Spring AOP获取方法参数?

2022-08-31 11:13:37

我正在使用春季AOP,并具有以下方面:

@Aspect
public class LoggingAspect {

    @Before("execution(* com.mkyong.customer.bo.CustomerBo.addCustomer(..))")
    public void logBefore(JoinPoint joinPoint) {

        System.out.println("logBefore() is running!");
        System.out.println("hijacked : " + joinPoint.getSignature().getName());
        System.out.println("******");
    }

}

上述方面拦截方法执行。 方法将字符串作为输入。但是我需要记录传递给方法内部方法的输入。
有可能这样做吗?addCustomeraddCustomeraddCustomerlogBefore


答案 1

您有几种选择:

首先,您可以使用 JoinPoint#getArgs() 方法,该方法返回一个包含建议方法的所有参数的。您可能需要根据要对它们执行的操作进行一些铸造。Object[]

其次,您可以使用切入点表达式,如下所示:args

// use '..' in the args expression if you have zero or more parameters at that point
@Before("execution(* com.mkyong.customer.bo.CustomerBo.addCustomer(..)) && args(yourString,..)")

那么你的方法可以被定义为

public void logBefore(JoinPoint joinPoint, String yourString) 

答案 2

是的,可以使用 getArgs 找到任何参数的值

@Before("execution(* com.mkyong.customer.bo.CustomerBo.addCustomer(..))")
public void logBefore(JoinPoint joinPoint) {

   Object[] signatureArgs = thisJoinPoint.getArgs();
   for (Object signatureArg: signatureArgs) {
      System.out.println("Arg: " + signatureArg);
      ...
   }
}

推荐