Sto utilizzando Spring <aop:aspectj-autoproxy />
per il proxy di alcune interfacce JPA repository.Spring AspectJ non riesce quando interfaccia con doppio proxy: Impossibile generare sottoclasse CGLIB della classe
Tuttavia, il proxy non riesce con il seguente Cannot subclass final class class $Proxy80
:
Impossibile generare CGLIB sottoclasse di [classe $ Proxy80]: comuni cause di questo problema includono l'utilizzo di una classe finale o un non-visibile classe; l'eccezione annidata è java.lang.IllegalArgumentException: Impossibile sottoclasse classe classe finale $ Proxy80
Come l'errore, e un rapido google, suggerisce - ciò si verifica quando il bersaglio proxy è un classe finale. Tuttavia, in questa catena, non ci sono classi - solo interfacce. Spring genera tutte le implementazioni in fase di runtime.
Ecco la definizione dell'interfaccia che è mancata:
public interface AuthorDAO extends
CrossStoreJpaRepository<Author,Long>, CrossStoreQueryDslPredicateExecutor<Author> {
}
Nota Sto utilizzando una sottoclasse personalizzata della primavera del JpaRepository e QueryDslPredicateExecutor, definito come segue:
public interface CrossStoreJpaRepository<T, ID extends Serializable> extends JpaRepository<T, ID> {}
public interface CrossStoreQueryDslPredicateExecutor<T> extends QueryDslPredicateExecutor<T>{}
Altrove, definisco personalizzato aspetti per i metodi su queste interfacce:
@Aspect
@Component
public class DocumentLoadingAspect extends AbstractDocumentAspect {
@Around("execution(* com.mangofactory.crossstore.repository.CrossStore*.find*(..))")
public Object loadCrossStoreEntity(ProceedingJoinPoint pjp) throws Throwable
{
// implementation omitted
}
Ho confermato che sono queste le definizioni @Aspect
che causano il problema rimuovendole e rieseguendo l'app.
Che cosa sta causando questo errore? Sembra che il proxy di un proxy stia fallendo per qualche motivo.
Hai trovato la soluzione per questo? Ricevo lo stesso errore quando sull'interfaccia di Integration Gateway. – Ocelot