【发布时间】:2012-05-09 19:11:38
【问题描述】:
我正在使用 Spring 的 <aop:aspectj-autoproxy /> 代理一些 JPA repository 接口。
但是,代理失败并出现以下Cannot subclass final class class $Proxy80:
无法生成类 [class $Proxy80] 的 CGLIB 子类:Common 此问题的原因包括使用最终类或不可见的 班级;嵌套异常是 java.lang.IllegalArgumentException: 不能 子类 final 类 $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 定义导致了问题,方法是删除它们并重新运行应用程序。
是什么导致了这个错误?由于某种原因,代理代理似乎失败了。
【问题讨论】:
-
您找到解决方案了吗?我在集成网关界面上遇到了同样的错误。