Seite 1 von 1

call / execution

Verfasst: 30. Jan 2008 13:31
von skywalker
Hi,

hat jemand ein gutes Fallbeispiel um zwischen call und execution zu unterscheiden?

Klar ist, das call auf der Aufrufer-Seite greift, während execution beim Ausführen der Methode greift. Mir ist aber während der Übung und des Labs noch kein Fall begegnet wo es wirklich einen Einfluß auf die Ausführung gegeben hätte.

Gibt es Dinge die ich mit dem einen machen kann, mit dem anderen aber nicht?
Hat es Einfluß auf cflow oder cflowbelow? - Meines Wissens nämlich nicht.

Lieben Dank
Lukas

Re: call / execution

Verfasst: 30. Jan 2008 15:15
von marcel_b
Eine Idee(vielleicht hilfts):

Stell dir vor, du schreibst ein Framework und möchtest eine Funktionalität in deinem Framework mit Hilfe eines Aspekts modifizieren (Connection-Pooling wäre so ein Standardbeispiel). Jetzt kannst du entweder Call oder Execution nehmen.

Problem: In einem Framework sind die Clients zum Zeitpunkt des Kompilierens nicht bekannt, da die Clients erst zur Laufzeit in der Applikation bekannt werden. Willst du die Aspekte also statisches zur Compilezeit einweben, musst du es in Execution machen, weil du nur da sicher sein kannst, das er immer ausgeführt wird.

Ein anderer Punkt:
Stell dir vor, du möchtest alle Aufrufe auf String.compareTo() abfangen. Warum solltest du den gesamten Code nach diesem Aufruf untersuchen und ihn vllt hundert mal einweben, wenn es dir doch vollkommen ausreichen würde es nur an einer stelle (in compareTo()) zu tun.

Anders herum geht es genauso... Es kann sein, dass eine Methode für manche Aufrufer anders funktionieren soll als für den Rest des Systems (vllt Sicherheitsbeschränkungen überprüfen oder auch nicht). Dann kann mit hilfe eine call Pointcuts schneller und einfacher das neue Verhalten implementiert werden, weil nur die relevanten Aufrufe abgefangen werden müssen. Der Rest vom System bleibt davon unberührt.


Es kommt darauf an, was du brauchst. Daraus ergibt sich der Rest.

Re: call / execution

Verfasst: 30. Jan 2008 20:48
von skywalker
Vielen Dank Marcel, leuchtet ein!

Gruß
Lukas