Да, синхронизация может рассматриваться как аспект. Не является ли идея АОП решением сквозных проблем? Затем, рассматривая синхронизацию как сквозную проблему, можно обработать ее через 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 в действии .