我从一个原始问题开始 Need help creating a specific pointcut that utilizes a value from a method annotation
我决定要问另一个问题来改变我正在采取的方法。 我有一个方法( navigation ),在该方法内部调用另一个方法,我希望有@Around建议。
@RequestMapping(method = RequestMethod.GET)
public String navigation(ModelMap model) {
...
// Call Auto Handling
logger.info("Call AutoHandling");
this.processAutoHandling(callSession, FunctionalArea.PRE_MAIN_MENU);
}
...
return forward(returnView);
}
这是可能的,因为如果方法在同一个类中,我似乎无法使其工作。
这项工作如果它不在对象本身上:
@Around("execution(* *.processAutoHandling(..)) &&" +
"args(callSession, functionalArea) && " +
"args(functionalArea) && " +
"target(bean)"
)
public Object processAutoHandlingCall2(ProceedingJoinPoint jp,
CallSession callSession,
FunctionalArea functionalArea,
Object bean)
throws Throwable {
logger.debug("processAutoHandleCall");
return jp.proceed();
}
在我的控制器中进行此调用:
autoHandlingComponent.processAutoHandling(callSession, FunctionalArea.PRE_MAIN_MENU);
而不是
this.processAutoHandling(callSession, FunctionalArea.PRE_MAIN_MENU);
答案 0 :(得分:1)
您似乎正在使用Spring的基于代理的AOP。如果是这样,这是一个已知的限制。有关详细信息,请参阅Spring文档中的Understanding AOP Proxies。您有两种方法可以解决此问题:
AopContext.currentProxy()
方法。我会劝阻这种方法,因为你的代码现在将非常明确地与Spring AOP绑定。