我只关注@Around
example provided by spring,并快速询问将参数传递给基础方法(their explanation wasn't clear to me)的行为。
如果我将Aspect包含在一个带参数的方法中,我是否必须将参数显式传递给proceed(Object[])
方法,如此...(或者这只是为了覆盖参数?)
return pjp.proceed(pjp.getArgs());
或者调用proceed
没有args,隐式地将原始参数传递给底层方法?
return pjp.proceed();
长话短说,我不想改变调用现有方法的行为。我目前正在写一个快速测试来证明这种行为......
答案 0 :(得分:2)
是的,你是对的。在没有args的情况下调用proceed()
,隐式地将原始参数传递给基础方法。
从用户角度pjp.proceed(pjp.getArgs())
和pjp.proceed(new Object[] {...})
执行相同操作。
只有在想要覆盖参数时才需要调用ProceedingJoinPoint::proceed
。
对于基于Spring的运行时编织,分别查看MethodInvocationProceedingJoinPoint
和ReflectiveMethodInvocation::invocableClone
,您将看到两个ReflectiveMethodInvocation::invocableClone(arguments)
方法都在调用
引擎盖下{{1}}。