我正在使用Spring的<aop:aspectj-autoproxy />
代理一些JPA repository接口。
但是,代理失败时出现以下Cannot subclass final class class $Proxy80
:
无法生成类[class $ Proxy80]的CGLIB子类:Common 导致此问题的原因包括使用最终类或不可见 类;嵌套异常是java.lang.IllegalArgumentException:不能 子类final类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
定义导致问题的原因是删除它们并重新运行应用程序。
导致此错误的原因是什么?似乎代理代理因某种原因失败了。
答案 0 :(得分:0)
我的猜测是,Spring数据JPA将repo实现创建为 final 的Java代理,然后<aop:aspectj-autoproxy />
尝试使用cglib子类创建另一个代理来创建另一个代理工作。在autoproxy元素上将proxy-target-class
设置为true
吗?