aspectj中的同步切入点

时间:2012-12-13 07:41:32

标签: java sync aspectj aspect

我正在使用aspectj构建Rest服务器。对于同步,我想使用方面。我定义了这样的切入点来捕获发生更新和删除事件的所有点: 我定义了一个注释并使用注释来捕获要同步的方法:

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

如果切入点同步会发生什么,同步切入点意味着什么。截取切入点的线程是由AspectJ插件新创建的还是使用进入截获方法的线程?

感谢您的帮助。

1 个答案:

答案 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();
        }
    }
}