2009-07-19 17 views
1

public pointcut myToString() : within(mypackage.*) 
&& execution(public String toString()); 

String around(): myToString(){ 
    System.out.println("myToString"); 
    return proceed(); 
} 

Es funktioniert nur, wenn ich toString in Klasse Im überschreiben, versuchen zu weben, gibt es eine Möglichkeit, es auf alle ToString-Methoden arbeiten zu lassen?AspectJ vs toString()

+0

Vielleicht sollten Sie versuchen, Object.toString() –

+0

weben Das wird * übereinstimmen * alle toString(), die nicht überschrieben wurde –

Antwort

4

Es wird nicht, weil in() arbeiten passt nur die Ausführung in Ihrem Paket, aber Sie erben die Methode toString(), wenn Sie es ausdrücklich erklärt wird.

Edit: Ich hatte einen Blick, wird cflow auch nicht. Ich kann keine andere Möglichkeit sehen, dies ohne Ladezeitweben zu tun, aber dies würde Logging alle Aufrufe toString(), was eine sehr schlechte Idee ist. Sie sind wahrscheinlich viel besser einfach toString erklärt() in allen Verfahren mit Rückkehr super.toString() so Ihre ursprüngliche pointcut funktioniert (und wenn toString() sonst nie genannt wird, verliert man nicht alles).

Wenn Sie entschlossen sind, diesen Ansatz zu verfolgen, gibt es einen Abschnitt der aspectj documentation, der Sie mit dem Laden der Ladezeit beginnen wird.

Update: Eine andere Option ist, Detail Formatters Eclipse zu verwenden. Mit ihnen können Sie die toString() - Methoden für Debugging-Zwecke dekorieren.


Ursprüngliche Antwort: Sie versuchen cflow verwendet, könnte in dem Steuerfluss von toString() jeder beitreten Punkt übereinstimmen. Hinweis: Ich konnte dies nicht überprüfen, also überprüfe die Syntax (es muss möglicherweise auch Ausführung() statt Aufruf() sein, obwohl ich mich nicht sicher erinnern kann). Zum Beispiel:

public pointcut myToString() : cflow(call(String mypackage.*.toString())); 

Ein weiterer Punkt, passen Hinzufügen System.out Anrufe, sollten Sie eine Logging-Framework.

+0

thx für den Versuch, mir zu helfen, wie es mit der Kompilierung Weben zu tun? Es könnte eine schlechte Idee sein, aber ich werde das zum Testen verwenden, also sollte es nicht so schlimm weh tun. – martin

+0

Entschuldigung, es hätte ** Last ** sein müssen - Zeit Web, aktualisiert und eine Referenz hinzugefügt. –