Używam Spring <aop:aspectj-autoproxy />
do proxy niektórych interfejsów JPA repository.Spring AspectJ nie działa, gdy interfejs podwójnego proxy: Nie można wygenerować podklasy CGLIB klasy
Jednakże proxy się niepowodzeniem z następującym Cannot subclass final class class $Proxy80
:
nie można wygenerować CGLIB podklasę klasy [klasy $ Proxy80]: wspólne przyczyn tego problemu obejmują wykorzystanie końcowe grupy lub niewidoczny klasa; Wyjątkiem jest zagnieżdżona java.lang.IllegalArgumentException: Nie można podklasą klasy final class $ Proxy80
jako błąd i szybkie google sugeruje - to występuje, gdy obiekt proxy jest ostateczna klasy. Jednak w tym łańcuchu nie ma klas - tylko interfejsy. Wiosna generuje wszystkie implementacje w czasie wykonywania.
Oto definicja interfejsu, który jest w braku:
public interface AuthorDAO extends
CrossStoreJpaRepository<Author,Long>, CrossStoreQueryDslPredicateExecutor<Author> {
}
Uwaga używam niestandardowego podklasa sprężyny JpaRepository i QueryDslPredicateExecutor, zdefiniowane następująco:
public interface CrossStoreJpaRepository<T, ID extends Serializable> extends JpaRepository<T, ID> {}
public interface CrossStoreQueryDslPredicateExecutor<T> extends QueryDslPredicateExecutor<T>{}
gdzie indziej, ja definiować niestandardowe aspekty dla metod na tych interfejsach:
@Aspect
@Component
public class DocumentLoadingAspect extends AbstractDocumentAspect {
@Around("execution(* com.mangofactory.crossstore.repository.CrossStore*.find*(..))")
public Object loadCrossStoreEntity(ProceedingJoinPoint pjp) throws Throwable
{
// implementation omitted
}
Potwierdziłem, że to te @Aspect
definicje, które powodują problem przez usunięcie i ponowne uruchomienie aplikacji.
Co powoduje ten błąd? Wygląda na to, że proxy z jakiegoś powodu nie działa z jakiegoś powodu.
Czy znalazłeś rozwiązanie problemu? Otrzymuję ten sam błąd podczas korzystania z interfejsu bramy integracyjnej. – Ocelot