2012-04-30 10 views
8
のCGLIBサブクラスを生成できません

私は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の定義であることを確認しました。

このエラーの原因は何ですか?何らかの理由でプロキシのプロキシが失敗しているようです。

+0

解決方法を見つけましたか?私は、Integration Gatewayインターフェイスで同じエラーが発生しています。 – Ocelot

答えて

0

私の推測では、春データJPAは機能しませんCGLIBのサブクラスを使用して、側面ごとに別のプロキシを作成するために最終、その後<aop:aspectj-autoproxy />の試みであるJavaプロキシとしてレポの実装を作成することです。 proxy-target-classは、autoproxy要素のtrueに設定されていますか?

関連する問題