2015-01-20 9 views
6

So einen Aspekt mit einer Methode, die ich habe mit dem folgenden Ausdruck erklärt bekommt:Gibt es einen AspectJ Pointcut-Ausdruck, der alle Unterpakete durchsucht?

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

Das funktioniert perfekt für alle Klassen im Paket aaa.bbb.ccc. Nun möchte ich jedoch alle Klassen in aaa.bbb, einschließlich diejenigen in aaa.bbb.ccc erfassen. Also versuchte ich es bis zu hier sichern:

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

Dies ist nur die Klassen aus aaa.bbb packt, aber, und ignoriert Klassen von aaa.bbb.ccc. Gibt es eine Möglichkeit, den Ausdruck rekursiv nach allen Unterpaketen suchen zu lassen?

Antwort

14

Verstanden! Der Textwechsel ist überraschend trivial.

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

... wird ...

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

Fügen Sie einfach die zusätzliche Zeit zwischen dem Paketnamen und der Qualifikation, und du bist aus dem Rennen.

Ein Problem, dem ich nach der Änderung begegnete, war, dass der ganze Frühling explodierte und auf mich stürzte. Das war, weil der Aspekt selbst in einem Unterpaket von aaa.bbb war. Wenn Sie dies tun, stellen Sie sicher, dass Sie eine !within-Klausel verwenden, um Ihren Aspekt davon abzuhalten, sich selbst zu verarbeiten.

+3

Dies sind grundlegende Dinge, die in der Dokumentation ausführlich behandelt werden. Wie auch immer, schön, dass du es selbst gefunden hast. Sie können es optimieren, indem Sie einen Punkt und einen Stern weglassen: 'execution (* aaa.bbb .. * (..))' – kriegaex

+0

@kriegaex Können Sie mich auf die Dokumentation verweisen, wo das ist? Ich habe lange auf Google gesucht, bevor ich hierher kam und fragte. – asteri

+1

Suchen Sie unter "Typnamensmuster" in der [Programmieranleitung] (http://eclipse.org/aspectj/doc/released/progguide/printable.html#d0e5901) nach. – kriegaex

Verwandte Themen