私はSpringの<aop:aspectj-autoproxy />
を使用して、JPA repositoryインターフェイスをプロキシしています。インターフェイスをダブルプロキシするとSpring AspectJが失敗する
しかし、プロキシは、以下のCannot subclass final class class $Proxy80
で失敗している:
は、クラスのCGLIBサブクラス[クラス$ Proxy80]を生成できませんでした。この問題の一般的な 原因は、最終的なクラスを使用するか、または非可視含ま クラス。ネストされた例外は、java.lang.IllegalArgumentExceptionがある:ことはできません サブクラスfinalクラスクラス$ Proxy80エラーとして
、そして簡単にGoogleは、示唆 - プロキシターゲットがfinalクラスであるとき、この問題が発生しました。しかし、このチェーンでは、クラスはありません - インターフェイスのみです。 Springはすべての実装を実行時に生成します。ここで
は失敗のインターフェイスの定義です:私は春のJpaRepositoryのカスタムサブクラスを使用してQueryDslPredicateExecutor、次のように定義されています
public interface AuthorDAO extends
CrossStoreJpaRepository<Author,Long>, CrossStoreQueryDslPredicateExecutor<Author> {
}
注:
他の場所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
の定義であることを確認しました。
このエラーの原因は何ですか?何らかの理由でプロキシのプロキシが失敗しているようです。
解決方法を見つけましたか?私は、Integration Gatewayインターフェイスで同じエラーが発生しています。 – Ocelot