我正在使用 Spring<aop:aspectj-autoproxy />
代理一些JPA 存储库接口。
但是,代理失败并显示以下内容Cannot subclass final class class $Proxy80
:
无法生成类 [class $Proxy80] 的 CGLIB 子类:此问题的常见原因包括使用最终类或不可见类;嵌套异常是 java.lang.IllegalArgumentException: Cannot subclass final class class $Proxy80
正如错误和快速谷歌所暗示的那样 - 当代理目标是最终类时会发生这种情况。然而,在这个链中,没有类——只有接口。Spring 在运行时生成所有实现。
这是失败的接口的定义:
public interface AuthorDAO extends
CrossStoreJpaRepository<Author,Long>, CrossStoreQueryDslPredicateExecutor<Author> {
}
注意我使用的是 spring 的JpaRepository和QueryDslPredicateExecutor的自定义子类,定义如下:
public interface CrossStoreJpaRepository<T, ID extends Serializable> extends JpaRepository<T, ID> {}
public interface CrossStoreQueryDslPredicateExecutor<T> extends QueryDslPredicateExecutor<T>{}
在其他地方,我为这些接口上的方法定义了自定义方面:
@Aspect
@Component
public class DocumentLoadingAspect extends AbstractDocumentAspect {
@Around("execution(* com.mangofactory.crossstore.repository.CrossStore*.find*(..))")
public Object loadCrossStoreEntity(ProceedingJoinPoint pjp) throws Throwable
{
// implementation omitted
}
@Aspect
我已经通过删除它们并重新运行应用程序来确认是这些定义导致了问题。
是什么导致了这个错误?由于某种原因,代理代理似乎失败了。