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)
引擎盖下。
我刚刚关注 @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)
引擎盖下。