2012-12-13 97 views
4

我正在用aspectj構建Rest服務器。爲了同步我想使用方面。我這樣定義切入點來捕獲所有地方更新和刪除事件發生點: 我定義的註釋和使用註釋捕捉方法同步:aspectj中的同步切入點

synchronized pointcut syncJoinPoints():call (@Synchronizes * *(..)); 

如果切入點是同步的會發生什麼,這是什麼意味着同步切入點。攔截切入點的線程是由AspectJ插件新創建的,還是使用輸入截取方法的線程?

謝謝你的幫助。

回答

5

AspectJ不會自行創建線程:「唯一」編織通過注入一些額外的指令來修改代碼,但它始終在同一個上下文中運行。

切入點定義中的​​關鍵字沒有任何用處。如果你想達到什麼是所有來電同步(或執行,這意味着更少的修改後的代碼)與@Synchronizes在同一個鎖註解的方法,你需要一個Around建議:

public aspect SynchronizingAspect { 
    private static final Object lock = new Object(); 

    pointcut syncJointPoint(): execution(@Synchronizes * *.*(..)); // or call() 

    Object around(): syncJointPoint() { 
     synchronized(lock) { 
      return proceed(); 
     } 
    } 
}