ERLEDIGT
NEIN
NEIN
ANTWORTEN
2
2
ZUGRIFFE
886
886
EMPFEHLEN
-
01.03.11 13:18 #1
- Registriert seit
- May 2004
- Beiträge
- 684
Hallo zusammen,
ich habe eine Frage bezüglich AOP, der Verwendung von Spring / AspectJ / CGLIB. Ich scheine alles korrekt eingebunden und konfiguriert zu haben, dennoch wird mein Advice, der einfach vor einem Methodenaufruf testweise etwas auf der Konsole ausgeben soll, nicht aufgerufen.
Der entscheidende Teil meiner Context-Konfiguration sieht so aus:
Code xml:1 2 3 4
<context:load-time-weaver aspectj-weaving="on" /> <aop:aspectj-autoproxy proxy-target-class="true" /> <bean id="testAspect" class="de.test.aop.TestAspect" />
Die Klasse TestAspect sieht so aus:
Code java:1 2 3 4 5 6 7 8
@Aspect public class TestAspect { @Before( "execution(public void de.test.LoginController.login())" ) public void doBefore() { System.err.println( "doBefore()" ); } }
Die Methodeist sehr einfach gehalten:Code java:1
de.test.LoginController.login()
Code java:1 2 3 4 5 6
public void login() { System.err.println( "login()" ); // Weiterer Code hier }
Das Programm starte ich mit dem Parameter
Code :1
-javaagent:../Lib/lib/Spring/spring-agent.jar
Problem:
Wenn die Methode "login()" innerhalb des Programmes aufgerufen wird, was ich an der Ausgabe "login()" sehe, dann wird der Advice aber nicht ausgeführt, d.h. ich sehe kein "doBefore()" auf der Konsole - es werden auch keine Exceptions geworfen.
Weitere Informationen:
- Das Programm läuft in keinem Application Container, ist keine Web-Application
- Es handelt sich um eine "normale" Spring Application
- Die Klasse "LoginController" ist eine Spring Bean, allerdings hatte ich es auch auf einer normalen Klasse getestet, die via "new" zur Laufzeit instanziiert wird, auch damit ging es nicht
Erkenntnisse:
- Die Libs sind korrekt eingebunden (würde eine fehlen, gäbe es schon Meldungen beim Start, das habe ich bereits hinter mir...), eingebunden sind: spring.jar, spring-aspects.jar, spring-agent.jar, aspectjrt.jar, aspectjweaver.jar
- Der Java-Agent wird gefunden, sonst würde die JVM beim Start eine entsprechende Fehlermeldung ausgeben
- Wenn ich von CGLIB auf Spring AOP mit Interfaces umstelle, funktioniert der Advice. D.h. wenn "LoginController" ein Interface ist, in dem die "login()" Methode definiert wurde, klappt es. Sobald ich ein Proxy einer Klasse mit CGLIB erstellen will, klappt es nicht mehr (leider bin ich auf Load-Time-Weaving / AspectJ und damit CGLIB angewiesen)
- Der Aspekt (TestAspect) wird auch "bachtet", d.h. wenn ich den Ausdruck in @Before auf etwas ungültiges setze, dann meckert der Parser von AspectJ
Unsicherhiten / Offene Fragen:
- Ich habe keine META-INF/aop.xml Konfigurationsdatei, aber wenn ich es richtig verstehe, ist dies auch nicht nötig, wenn ich (siehe oben) angebe, so wie ich es gemacht habe (wie oben erwähnt funktioniret es ja auch ohne CGLIB, also mit Java Proxys / Spring AOP)Code :
1
aspectj-weaving="on"
Ich habe irgendwie das Gefühl, dass ich eine Kleinigkeit vergessen habe. Insbesondere weil es mit Spring AOP und den Interface-Proxies ja funktioniert, dürfte die Konfiguration ja nicht all zu falsch sein.
Leider komme ich an dieser Stelle nicht mehr weiter - über Eure Hilfe würde ich mich wirklich sehr freuen
Vielen Dank!
-
08.03.11 12:44 #2
- Registriert seit
- May 2004
- Beiträge
- 684
Hallo nochmal,
hat keiner eine Idee? Ich komme an dieser Stelle nicht weiter. Ist ne dumme Situation, wenn man keine Fehlermeldung erhält und nix...
Ich bin für jeden Tipp dankbar!
-
Hi,
ich hatte mal ein ähnliches Problem, vielleicht helfen dir ja die Erkenntnisse aus dem Beitrag weiter?
http://www.tutorials.de/enterprise-j...ufgerufen.html
Grüße
Peter
Ähnliche Themen
-
Funktion wird nicht aufgerufen
Von blck im Forum Javascript & AjaxAntworten: 4Letzter Beitrag: 10.09.09, 16:29 -
Spring & AspectJ:Methode wird nicht aufgerufen
Von pizza1234 im Forum Enterprise Java (JEE, J2EE, Spring & Co.)Antworten: 18Letzter Beitrag: 12.05.09, 18:21 -
paint wird nicht aufgerufen
Von xmoO im Forum Swing, Java2D/3D, SWT, JFaceAntworten: 0Letzter Beitrag: 25.04.09, 10:01 -
Spring Dynamic Modules (OSGi) und AspectJ
Von Thomas Darimont im Forum JavaAntworten: 4Letzter Beitrag: 08.04.08, 18:13 -
php-Script wird nicht aufgerufen
Von kesnw im Forum PHPAntworten: 1Letzter Beitrag: 31.03.04, 01:49





Zitieren
Login





