我正在使用aspectj构建Rest服务器。对于同步,我想使用方面。我定义了这样的切入点来捕获发生更新和删除事件的所有点: 我定义了一个注释并使用注释来捕获要同步的方法:
synchronized pointcut syncJoinPoints():call (@Synchronizes * *(..));
如果切入点同步会发生什么,同步切入点意味着什么。截取切入点的线程是由AspectJ插件新创建的还是使用进入截获方法的线程?
感谢您的帮助。
答案 0 :(得分:5)
AspectJ本身不创建线程:编织“仅”通过注入一些额外的指令来修改代码,但它会继续在相同的上下文中运行。
切入点定义上的synchronized
关键字没有做任何有用的事情。如果你想要实现的是将所有调用(或执行,这意味着更少的修改代码)同步到同一个锁上用@Synchronizes
注释的方法,你需要一个周围的建议:
public aspect SynchronizingAspect {
private static final Object lock = new Object();
pointcut syncJointPoint(): execution(@Synchronizes * *.*(..)); // or call()
Object around(): syncJointPoint() {
synchronized(lock) {
return proceed();
}
}
}