春天@Around>参数的行为

时间:2015-11-17 06:02:43

标签: java spring aop spring-aop

我只关注@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();

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

1 个答案:

答案 0 :(得分:2)

是的,你是对的。在没有args的情况下调用proceed(),隐式地将原始参数传递给基础方法。 从用户角度pjp.proceed(pjp.getArgs())pjp.proceed(new Object[] {...})执行相同操作。 只有在想要覆盖参数时才需要调用ProceedingJoinPoint::proceed

对于基于Spring的运行时编织,分别查看MethodInvocationProceedingJoinPointReflectiveMethodInvocation::invocableClone,您将看到两个ReflectiveMethodInvocation::invocableClone(arguments)方法都在调用 引擎盖下{{1}}。