2012-04-30 10 views
8

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.

+0

Czy znalazłeś rozwiązanie problemu? Otrzymuję ten sam błąd podczas korzystania z interfejsu bramy integracyjnej. – Ocelot

Odpowiedz

0

Domyślam się, że dane Wiosna JPA tworzy realizację repo jako proxy Java, który jest końcowy a następnie <aop:aspectj-autoproxy /> próby tworzenia kolejnego pełnomocnika na swój aspekt korzystania cglib podklasy, które nie będą działać. Czy proxy-target-class jest ustawione na true na elemencie autoproksy?

Powiązane problemy