Spring AOP的無助,因爲它只能理解執行()切入點。
AspectJ中包括了更多的切入點,包括withincode()構造,這聽起來像你想要什麼:
withincode(* YourClass.methodX(. .))
這可以讓你勸一個給定的方法exection內的所有連接點
讀AspectJ in Action有關更多信息,這是關於AspectJ和Spring AOP的一本很好的書。
編輯:
這裏是一些示例代碼:
package com.dummy.aspectj;
import java.util.Arrays;
import java.util.Collections;
public class DummyClass{
public static void main(final String[] args){
System.out.println(Arrays.asList("One", Collections.singleton("Two")));
System.out.println("Enough?");
}
}
package com.dummy.aspectj;
import java.util.Arrays;
public aspect DummyAspect{
pointcut callWithinMain() :
withincode(* com.dummy.aspectj.DummyClass.main(..)) // anything inside DummyClass.main
&& call(* *.*(..)); // but only method calls
before() : callWithinMain() {
System.out.println("\n***************************************************");
System.out.println("** Calling:\n**\t"
+ thisJoinPointStaticPart.getSignature()
+ "\n** with arguments:\n**\t "
+ Arrays.deepToString(thisJoinPoint.getArgs()));
System.out.println("***************************************************\n");
}
}
運行Eclipse中的DummyClass/AJDT生成的輸出:
***************************************************
** Calling:
** Set java.util.Collections.singleton(Object)
** with arguments:
** [Two]
***************************************************
***************************************************
** Calling:
** List java.util.Arrays.asList(Object[])
** with arguments:
** [[One, [Two]]]
***************************************************
***************************************************
** Calling:
** void java.io.PrintStream.println(Object)
** with arguments:
** [[One, [Two]]]
***************************************************
[One, [Two]]
***************************************************
** Calling:
** void java.io.PrintStream.println(String)
** with arguments:
** [Enough?]
***************************************************
Enough?
你有一個方便的例子,所以把它放在這裏?感謝啓發! – sof 2010-08-17 16:34:58
看到我的更新後的一些示例代碼 – 2010-08-18 13:35:28
哦!足以消化。正如我所說, – sof 2010-08-18 14:21:21