Spring @Around > 参数的行为

Spring @Around > Behaviour of arguments

我刚刚关注 @Around example provided by spring, and had a quick question about the behaviour of passing arguments to the underlying method (their explanation wasn't clear to me).

如果我将 Aspect 包装在一个接受参数的方法周围,我是否必须像这样将参数显式传递到 proceed(Object[]) 方法中......(或者这只是为了覆盖参数?)

return pjp.proceed(pjp.getArgs());

或者在没有参数的情况下调用 proceed,隐式地将原始参数传递给底层方法?

return pjp.proceed();

长话短说,我不想更改调用现有方法的行为。我目前正在编写一个快速测试来证明这种行为...

是的,你是对的。调用不带参数的 proceed,隐式地将原始参数传递给底层方法。 从用户的角度来看 proceed()pjp.proceed(pjp.getArgs()) 做同样的事情。 仅当您想覆盖参数时才需要调用 pjp.proceed(new Object[] {...})

对于基于 Spring 的运行时编织,请分别查看 MethodInvocationProceedingJoinPoint and ReflectiveMethodInvocation::invocableClone,您会看到两个 ProceedingJoinPoint::proceed 方法都调用 ReflectiveMethodInvocation::invocableClone(arguments) 引擎盖下。