2012-04-30 26 views
8

Tôi đang sử dụng số <aop:aspectj-autoproxy /> của Spring để ủy quyền một số giao diện JPA repository.Spring AspectJ không thành công khi giao diện proxy kép: Không thể tạo lớp con CGLIB của lớp

Tuy nhiên, các proxy là không với Cannot subclass final class class $Proxy80 sau:

Không thể tạo cglib lớp con của lớp [lớp $ Proxy80]: Sở hữu chung nguyên nhân của vấn đề này bao gồm sử dụng một lớp cuối cùng hoặc một tổ chức phi có thể nhìn thấy lớp học; lồng nhau ngoại lệ là java.lang.IllegalArgumentException: Không thể lớp lớp lớp cuối cùng $ Proxy80

Khi lỗi, và một google nhanh chóng, cho thấy - điều này xảy ra khi các mục tiêu proxy là một lớp học chính thức. Tuy nhiên, trong chuỗi này, không có các lớp - chỉ các giao diện. Mùa xuân tạo ra tất cả các triển khai trong thời gian chạy.

Đây là định nghĩa của giao diện đó là thất bại:

public interface AuthorDAO extends 
    CrossStoreJpaRepository<Author,Long>, CrossStoreQueryDslPredicateExecutor<Author> { 

} 

Note Tôi đang sử dụng một lớp con tùy chỉnh của mùa xuân của JpaRepositoryQueryDslPredicateExecutor, được xác định như sau:

public interface CrossStoreJpaRepository<T, ID extends Serializable> extends JpaRepository<T, ID> {} 
public interface CrossStoreQueryDslPredicateExecutor<T> extends QueryDslPredicateExecutor<T>{} 

Ở những nơi khác, tôi xác định tùy chỉnh các khía cạnh cho các phương pháp trên các giao diện này:

@Aspect 
@Component 
public class DocumentLoadingAspect extends AbstractDocumentAspect { 

    @Around("execution(* com.mangofactory.crossstore.repository.CrossStore*.find*(..))") 
    public Object loadCrossStoreEntity(ProceedingJoinPoint pjp) throws Throwable 
    { 
     // implementation omitted 
    } 

Tôi đã xác nhận rằng đó là những định nghĩa @Aspect đang gây ra sự cố bằng cách xóa chúng và chạy lại ứng dụng.

Điều gì gây ra lỗi này? Dường như proxy proxy bị lỗi vì một số lý do.

+0

Bạn có tìm thấy giải pháp cho việc này không? Tôi gặp lỗi tương tự khi trên giao diện Cổng kết nối. – Ocelot

Trả lời

0

tôi đoán là dữ liệu mùa xuân JPA tạo ra việc thực hiện repo như là một proxy Java đó là thức và sau đó <aop:aspectj-autoproxy /> cố gắng để tạo ra proxy khác mỗi khía cạnh của bạn sử dụng subclassing cglib mà sẽ không hoạt động. Có phải proxy-target-class được đặt thành true trên phần tử autoproxy không?

Các vấn đề liên quan