2010-11-18 6 views
3

Ich möchte Methode von einem nicht-Proxy-Objekt abfangen.Spring und aspectj, abfangen Methode eines Nicht-Proxy-Objekts

Ich habe eine Klasseninstanz MyClass myClassInstance=new MyClass() und ich möchte Aufruf von myClassInstance Methoden abfangen.

Ich weiß, dass alle funktioniert gut mit Proxies, aber ich brauche Aspekt auf nicht proxied.

Ist das möglich?

Danke.

Antwort

5

Es ist möglich, aber es ist nicht wünschenswert.

Sie können @Configurable verwenden und AspectJ wird Anrufe abfangen. Lesen Sie the 7.8.1 Using AspectJ to dependency inject domain objects with Spring section of the docs darüber.

Kurz gesagt - AspectJ steckt etwas "Magie" entweder zur Kompilierzeit oder zur Ladezeit (mit einem entsprechenden Weber), was die Klassen so modifiziert, dass sie Teil des Frühlingskontexts werden.

Aus warum ich denke, dass es unerwünscht ist - das ist dunkle Magie, die passiert, indem Sie die Struktur der Klassen ändern. Es ist kein objektorientierter Ansatz, und ich denke, es wird schwer zu unterstützen sein. Stellen Sie sich vor, 6 Monate später debattiert ein Kollege von Ihnen ein unangenehmes Problem. Es kann Tage dauern, bis er erkennt, dass diese Magie geschieht. Diese Meinung ist jedoch Unterwerfung. Die Funktionalität ist da und wenn Sie es brauchen - benutzen Sie es.

+0

@Bozho: Ich annotieren MyClass mit @Configurable aber nichts abgefangen wird. – blow

+0

@blow müssen Sie einige weitere Konfiguration hinzufügen. Wie - wie gesagt, lies den Abschnitt in der Dokumentation. Soweit ich mich erinnere, benötigen Sie entweder einen aspectj Compiler, oder aspectJ JVM Agent – Bozho

+0

@Bozho: ok, ich lese jetzt Ihre Bearbeitung, so denke ich, das ist nicht die Lösung für mich. Ich wollte den Aufruf der Methode meiner Entitäten abfangen, um die Sitzung für das Laden von faulen Sammlungen zu verwalten. Dies ist nicht die richtige Lösung, denke ich. – blow

1

Verwenden von Frühling, glaube ich nicht so (I appear to be wrong), mit AspectJ Ich glaube, Sie können so lange wie Sie compile all the code with the AspectJ compiler. Allerdings habe ich es noch nie probiert.

+0

Ich benutzte Frühling 3.0 zusammen mit aspectJ kompilieren Sie die Zeit, die spinnend, und es funktionierte gut. Viel besser als der Proxy-Ansatz. – Ralph

Verwandte Themen