2 Stimmen

Definieren Sie einen Pointcut für einen Member-Zugriff und einen Funktionsaufruf

Es ist ziemlich schwer zu erklären, aber ich möchte in AspectJ einen Pointcut beim Aufruf einer Funktion wie dieser definieren:

public class B{
    public A a;
}

public class A{
    public void foo(){...}
}

und der Pointcut sollte den folgenden Aufruf abfangen:

B.a.foo();

Ich habe immer noch nicht herausgefunden, wie man das macht (falls es das überhaupt gibt). Hat jemand von Ihnen eine Idee?

Vielen Dank im Voraus

2voto

Mike Daniels Punkte 8472

Ich bin selbst noch ein AspectJ-Neuling, aber ich habe das Gefühl, dass das nicht möglich ist. Selbst wenn Sie einen Pointcut entwickeln würden, der mit der B.a.foo() müssen Sie dennoch den folgenden Fall irgendwie behandeln:

A a = b.a;
a.foo();

oder sogar

public void fooA(A aToFoo) { aToFoo.foo(); }

public void whatever(B someB) { fooA(someB.a); }

0voto

esmiralha Punkte 9952

Sie können einen Pointcut definieren, der jeden Verweis auf das öffentliche Feld abfängt, aber AFAIK können Sie keinen erstellen, der einen Feldverweis mit einem Methodenaufruf für diesen Verweis kombiniert.

0voto

Andrew Eisenberg Punkte 27429

Wie andere bereits erwähnt haben, ist dies in AspectJ nicht möglich. Es gibt jedoch einige Forschungserweiterungen von AspectJ, die Tracecuts einführen, eine neue Art von Pointcuts, die genau das tun können, wonach Sie fragen. Ich glaube nicht, dass es bereits produktionsreife Implementierungen gibt, aber vielleicht sind Sie daran interessiert, sich darüber zu informieren. Ein guter Artikel ist hier zu finden:

http://lsmr.cpsc.ucalgary.ca/papers/walker-fse-2004.pdf

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X