2010-11-18 5 views
3

olarak adlandırılan açılamıyor Bu nedenle, etki alanımdaki bir nesnenin durumu değiştiğinde olayları işlemek için AspectJ'i kullanmaya başladım.AspectJ ile çalışan Newbie:

Etkin olarak, etki alanımdaki tüm belirleyici yöntemleri tamamlayan öneriler yazmak istiyorum. Tavsiye çağrıldığında, ayarlanan alanın başlangıç ​​değerini kontrol eder, ayarlayıcıyı çalıştırır, ardından ayarlayıcı çalıştıktan sonra değeri kontrol eder. Değer değişirse, bir olayı olay dinleyicisine gönderir ve değişikliği bildirir.

Burada bulunan eğiticiyi kullandım: http://www.andrewewhite.net/wordpress/2010/03/17/aspectj-annotation-tutorial/, ancak herhangi bir öneri alınamadım. Tavsiyemi dokuma için sadece LTW yöntemini kullandığımı farkettiğime göre, AspectJ dilini kullanarak öneride bulunmam ve ön derleme yapmam.

(benim test paketi için META-INF) Benim aop.xml böyle görünüyor:

<aspectj> 
    <aspects> 
     <aspect name="domain.aop.TestAspect"/> 
    </aspects> 
</aspectj> 

böyle görünüyor oluşturduk boy sınıfı:

package domain.aop; 

import org.aspectj.lang.JoinPoint; 
import org.aspectj.lang.annotation.Aspect; 
import org.aspectj.lang.annotation.Before; 

@Aspect 
public class TestAspect 
{ 
    @Around("call(* domain.*.set*(..))") 
    public void aroundSetMethods (JoinPoint jp) 
    { 
     System.out.println ("aroundSetMethod called"); 
    } 
} 

zaman Test vakamı çalıştırıyorum, bir metodun (domain.Error.setTask()) çağrıldığını görebiliyorum (bir kesme noktası belirleyerek). Bunun benim tavsiyemi tetiklemesi gerektiğine inanıyorum, ama asla tavsiye yöntemine girmem.

Burada yanlış yaptığım her hangi bir işaretçi var mı?

Teşekkür

cevap

3

Ayrıca dokumak istediğiniz sınıfları içermelidir.

Bu konudaki aop.xml dosyayı değiştirmek deneyin:

doğru şekilde çalışma zamanı sunucu veya Java ajan yapılandırmışsanız
<!DOCTYPE aspectj PUBLIC 
     "-//AspectJ//DTD//EN" "http://www.eclipse.org/aspectj/dtd/aspectj.dtd"> 
<aspectj> 
    <weaver> 
     <!-- only weave classes in this package --> 
     <include within="domain.*" /> 
    </weaver> 
    <aspects> 
     <!-- use only this aspect for weaving --> 
     <aspect name="domain.aop.TestAspect"/> 
    </aspects> 
</aspectj> 

, ayrıca günlüğüne dokuma işlemini görebilirsiniz.

Umarım yardımcı olur!

+1

Bu var. @Around ek açıklamanın, hangi sınıfların enstrümanlandığını belirlemek için dokumacı almak için yeterli olduğu izlenimi altındaydım. Görünüşe göre yapılacak daha fazla yapılandırma vardı. Teşekkürler... – Steve