nicht erzeugen Ich verwende Spring <aop:aspectj-autoproxy />
, um einige JPA repository Schnittstellen Proxy.Spring AspectJ schlägt fehl, wenn Doppel-Proxy-Schnittstelle: Konnte CGLIB-Unterklasse der Klasse
Allerdings ist die Proxying mit folgendem Cannot subclass final class class $Proxy80
Fehler:
konnte nicht CGLIB Unterklasse der Klasse [Klasse $ Proxy80] erzeugen: Common Ursachen dieses Problems umfassen die Verwendung eines Abschlussklasse oder einen nicht sichtbaren Klasse; verschachtelte Ausnahme ist java.lang.IllegalArgumentException: Können nicht Unterklasse final class Klasse $ Proxy80
Als Fehler und eine schnelle Google schlägt - dies tritt auf, wenn das Proxy-Ziel eine finale Klasse ist. In dieser Kette gibt es jedoch keine Klassen - nur Schnittstellen. Spring generiert alle Implementierungen zur Laufzeit.
Hier ist die Definition der Schnittstelle das ist versagt:
public interface AuthorDAO extends
CrossStoreJpaRepository<Author,Long>, CrossStoreQueryDslPredicateExecutor<Author> {
}
Hinweis JpaRepository und QueryDslPredicateExecutor, wie folgt definiert Ich verwende eine benutzerdefinierte Unterklasse von Frühlings:
public interface CrossStoreJpaRepository<T, ID extends Serializable> extends JpaRepository<T, ID> {}
public interface CrossStoreQueryDslPredicateExecutor<T> extends QueryDslPredicateExecutor<T>{}
Anderswo definiere ich benutzerdefinierte Aspekte für Methoden an diesen Schnittstellen:
@Aspect
@Component
public class DocumentLoadingAspect extends AbstractDocumentAspect {
@Around("execution(* com.mangofactory.crossstore.repository.CrossStore*.find*(..))")
public Object loadCrossStoreEntity(ProceedingJoinPoint pjp) throws Throwable
{
// implementation omitted
}
Ich habe bestätigt, dass es diese @Aspect
-Definitionen sind, die das Problem verursachen, indem Sie sie entfernen und die App erneut ausführen.
Was verursacht diesen Fehler? Es scheint so zu sein, dass das Proxying eines Proxy aus irgendeinem Grund fehlschlägt.
Haben Sie die Lösung dafür gefunden? Ich bekomme den gleichen Fehler, wenn ich auf der Integration Gateway-Schnittstelle bin. – Ocelot