据我所知,在AOP中,任何交叉问题,如日志记录,事务等都可以视为一个方面,大多数AOP框架都非常支持这些跨领域的问题。
我的问题是,
答案 0 :(得分:1)
只是理论上的“答案”。 :)
据我了解AOP,您可以在某些“切入点”/“关节点”中添加独立行为/“建议”。但同步旨在与其管理的代码紧密相关。
我想使用同步的方法是将它作为建议附加,并将其自身作为“联合点”,其他“方面”将定义一些“建议”。
或者在尝试调用某些“联合点”时,您可能会在“建议”中获得某种同步。
答案 1 :(得分:1)
理论上,可以有一个AOP框架,它可以为一组方法/类添加同步。它甚至都难以实施。但它通常不是你想要的。太多的同步与同步太少一样糟糕,因为您要么遇到死锁,要么将线程序列化太多,以至于无法有效地使用多个内核。
恐怕没有没有脑力的多线程编程的快捷方式。
答案 2 :(得分:0)
是的,可以将同步视为一个方面。 AOP背后的想法不是处理横切问题吗?然后,关于同步,可以通过AOP处理交叉问题,而无需定义和使用外部库。
请考虑以下关于读写锁定的示例。每当一个对象被读/写时,您就可以捕获该方法并为并发控制提供足够的功能。
public abstract aspect ReadWriteLockSynchronizationAspect
perthis(readOperations() || writeOperations()) {
public abstract pointcut readOperations();
public abstract pointcut writeOperations();
private ReadWriteLock _lock = new SomeReadWriteLock();
before() : readOperations() {
_lock.readLock().acquire();
}
after() : readOperations() {
_lock.readLock().release();
}
before() : writeOperations() {
_lock.writeLock().acquire();
}
after() : writeOperations() {
_lock.writeLock().release();
}
}
perthis
为每个读/写操作创建一个新方面。否则,只会创建一个方面,它就像一个单例对象。有关详细信息,请查看AspectJ in Action。