2012-12-13 96 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(); 
     } 
    } 
}