2015-01-20 26 views
6

Yani şu ifadesiyle bildirilmiş bir yöntem ile bir yönü var:Tüm alt paketleri araştıran bir AspectJ pointcut ifadesi var mı?

@Before("execution(* aaa.bbb.ccc.*.*(..))") 

Bu pakette aaa.bbb.ccc tüm sınıflar için mükemmel çalışıyor. Ancak,, da dahil olmak üzere tüm sınıfları aaa.bbb.ccc içinde yakalamak istiyorum. Yani burada o yedekleme çalıştı:

@Before("execution(* aaa.bbb.*.*(..))") 

Bu yalnızca olsa aaa.bbb sınıfları yakalar ve aaa.bbb.ccc sınıfları dikkate almaz. Tüm alt paketler için ifade aramasını yinelemeli olarak yapabileceğim bir yol var mı?

cevap

14

Anladım! Metinsel değişim şaşırtıcı derecede önemsizdir.

@Before("execution(* aaa.bbb.*.*(..))") 

...

@Before("execution(* aaa.bbb..*.*(..))") 

Basitçe paket adı ve eleme arasında ekstra süreyi ekleyin ve yarışları gidiyoruz ... haline gelir.

Değişikliği yaptıktan sonra karşılaştığım bir sorun, tüm Spring'in havaya uçtuğunun ve üzerime düştüğüydi. Bunun nedeni 'un kendisi'un aaa.bbb alt paketindeydi. Yani bunu yaparsanız, kendi kendini işlemeye çalışırken kendi özelliğinizi muaf tutmak için bir !within kullanın.

+3

Bu, belgelere iyi yazılmış temel öğelerdir. Her neyse, bunu kendin buldun. Bir noktayı ve bir yıldızı atlayarak onu iyileştirebilirsiniz: 'execution (* aaa.bbb .. * (..))' – kriegaex

+0

@kriegaex Beni bunun olduğu yere götürebilir misiniz? Gelmeden ve burada sormadan önce bir süredir Google'da arama yaptım. – asteri

+1

[Programlama Kılavuzu] 'nda "tür adı kalıpları" nın altına bakın (http://eclipse.org/aspectj/doc/released/progguide/printable.html#d0e5901). – kriegaex

İlgili konular