AOP

2011-09-29 17 views
5

Ben AOP böyle vb günlüğü, işlem olarak herhangi kesişen kaygıları bir yönü olarak tedavi edilebilir ve AOP çerçeveler çoğu çok iyi kesişen kaygıları bu tür desteklemek anlamak bir yönü olarak ele alınması senkronizasyon Can. Benim sorumAOP

,

  • kesişen bir mesele olarak tedavi edilebilir senkronizasyon mi?
  • Evet ise, kutunun dışında bu özelliği desteklemez (AspectJ ve Spring AOP dahil) mevcut kütüphaneler vardır?

Aradım ama birçok örnek bulamadık. Yine de bazı sınırlı araştırma makalelerine rastladım (1, 2). Sadece teorik "cevap"

cevap

1

. :) Ben AOP'yi anlamak gibi

, bazı "pointcuts"/"ortak noktaları" bağımsız davranışları/"öneriler" ekleyin. Ancak senkronizasyonun, yönettiği bir kodla sıkı bir şekilde ilişkili olması amaçlanmıştır.

Ben tavsiye olarak eklenecek ve diğer "yönleri" bazı "tavsiyelerde" tanımlanacak "ortak noktası" olarak kendisini sağlayacaktır eğer senkronizasyon kullanmak yoludur sanırım.

Veya bazı "ortak noktalar" aramaya çalışırken size "tavsiyeleri" içeride senkronizasyon çeşit alabilirsiniz.

1

Teoride bu yöntemler/sınıfların bir dizi senkronizasyonu ekleyen bir AOP çerçeve olması mümkündür. Uygulaması bile zor değil. Ama genellikle istediğin şey değildir. Çok fazla senkronizasyon, çok az senkronizasyon kadar kötüdür, çünkü ya kilitlenmelerle karşılaşırsınız ya da iş parçacığınızı çok fazla sıralarsınız, böylece birden çok çekirdeği etkin bir şekilde kullanamazsınız.

Korkarım ki çok iş parçacıklı programlamaya no brainer kısayol yok.

0

Evet senkronizasyon bir yönü olarak tedavi edilebilir. AOP’nın kesişen kaygılarla başa çıkması fikri değil mi? Daha sonra, bir çapraz kesim endişesi olarak senkronizasyon ile ilgili olarak, dış kütüphaneler tanımlanmadan ve kullanılmadan AOP yoluyla ele alınabilir.

okuma-yazma kilitleme hakkında aşağıdaki örneği inceleyin. Bir nesne okuma/yazma konusu olduğunda, yöntemi yakalayabilir ve eşzamanlılık kontrolü için yeterli işlevsellik sağlayabilirsiniz.

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 her biri için yeni bir yönü/yazma işlemi okuma oluşturur. Aksi takdirde, sadece bir yön oluşturulur ve tek bir nesne gibi çalışır. Daha fazla bilgi için AspectJ in Action'u kontrol edin.

İlgili konular