Spring AspectJ schlägt bei Double-Proxy-Schnittstelle fehl: Die CGLIB-Unterklasse der Klasse konnte nicht generiert werden

8

Ich verwende Spring <aop:aspectj-autoproxy /> , um einige JPA-Repository -Schnittstellen zu übernehmen.

Die Proxyfunktion schlägt jedoch mit folgendem Cannot subclass final class class $Proxy80 fehl:

  

Die CGLIB-Unterklasse der Klasse [Klasse $ Proxy80] konnte nicht generiert werden: Common   Ursachen für dieses Problem sind die Verwendung einer letzten Klasse oder einer nicht sichtbaren Klasse   Klasse; verschachtelte Ausnahme ist java.lang.IllegalArgumentException: Kann nicht   Unterklasse final class class $ Proxy80

Wie der Fehler, und ein schneller Google, vorschlägt - dies geschieht, wenn das Proxy-Ziel eine letzte Klasse ist. In dieser Kette gibt es jedoch keine Klassen - nur Schnittstellen. Spring generiert alle Implementierungen zur Laufzeit.

Hier ist die Definition der Schnittstelle, die fehlschlägt:

%Vor%

Hinweis Ich verwende eine benutzerdefinierte Unterklasse von spring's JpaRepository und QueryDslPredicateExecutor , wie folgt definiert:

%Vor%

An anderer Stelle definiere ich benutzerdefinierte Aspekte für Methoden an diesen Schnittstellen:

%Vor%

Ich habe bestätigt, dass diese @Aspect -Definitionen das Problem verursachen, indem Sie sie entfernen und die App erneut ausführen.

Was verursacht diesen Fehler? Es scheint so zu sein, dass die Proxy-Übertragung aus irgendeinem Grund fehlschlägt.

    
Marty Pitt 30.04.2012, 01:57
quelle

1 Antwort

0

Meine Vermutung ist, dass Spring-Daten JPA die Repo-Implementierung als Java-Proxy erstellt, die final ist und dann <aop:aspectj-autoproxy /> versucht, einen weiteren Proxy für Ihren Aspekt zu erstellen, indem Sie cglib-Unterklassen verwenden, die nicht funktionieren . Ist proxy-target-class im Autoproxy-Element auf true gesetzt?

    
Jukka 25.05.2013 20:07
quelle

Tags und Links