而不是使用@Before
,您可能必須使用@Around
,它允許您使用ProceedingJoinPoint
來獲取源位置。
@Around(" ..... ")
public void test(ProceedingJoinPoint pjp) throws Throwable {
SourceLocation sl = pjp.getSourceLocation();
System.out.println(sl.getFileName());
System.out.println(sl.getLine());
System.out.println(sl.getWithinType());
// allow through
pjp.proceed();
}
在你的情況下,這聽起來像你可能需要call
代替execution
但似乎call
沒有在Spring AOP支持: -
其他的切入點類型
完整的AspectJ切入點語言 支持在 Spring中不支持的附加切入點 指示符。這些是: 初始化,預初始化, staticinitialization,get,set, handler,adviceexecution,withincode, cflow,cflowbelow,if,@this和 @withincode。在由Spring AOP解釋的切入點表達式 中使用這些切入點 的指示符將導致 在IllegalArgumentException中被拋出,其中 被拋出。
我對AOP並不熟悉,但看看http://www.eclipse.org/aspectj/doc/released/runtime-api/org/aspectj/lang/JoinPoint.html,也許getTarget( )或getThis()可能是解決方案的關鍵? – esaj 2011-01-30 15:44:44