2011-06-29 18 views
2

私はthisサイトで単純なaopの例を実行しようとしています。私は瓶aspectjweaver、スプリングAOPとAspectJのを持っている:私は "AABBCC" .toLowerCase()のようにTest.javaでこの例を実行すると単純なAOPの例のUnsupportedPointcutPrimitiveException

@Aspect 
public class StringAspect { 

    @Pointcut("call(* String.toLowerCase())") 
    public void toLowerCasePointcut() {} 

    @Around("toLowerCasePointcut()") 
    public String toLowerCaseAroundAdvice(ProceedingJoinPoint joinPoint) throws Throwable { 
     String text = ((String) joinPoint.getTarget()).toUpperCase(); 
     return text; 
    } 
} 

は、私はこの例外を取得します。

Exception in thread "main" org.springframework.beans.factory.BeanCreationException: Error creating bean ... Initialization of bean failed; nested exception is org.aspectj.weaver.tools.UnsupportedPointcutPrimitiveException: Pointcut expression call(* String.toLowerCase()) contains unsupported pointcut primitive 'call' 

春AOPが含まれている「コール」が、AspectJのウィービングが動作していない理由を、あなたのアイデアを持っていますdoesntの?ありがとうございました。

編集:

は私の春の設定ファイルでは、私が唯一@aspect注釈付きクラスと<aop:aspectj-autoproxy />のBean定義を持っています。 私の瓶は:spring-aop-3.0.5、aopalliance、aspectjrt1.6.8、aspectjweaver1.5.0

答えて

2

AspectJ Eclipse pluginを使用して製織しようとしましたか? (SpringSource Tool Suiteにも含まれています)

Springの設定でいくつかのアスペクト設定がある場合は、それを削除して、プロジェクトでAspectJの性質を有効にしてみてください。また、すべてのAspectJ jarファイルを削除し、プラグインによって自動的に添付されたファイルのみを使用してください。

この設定では、少なくとも私のために動作します。

更新日:あなたがあるため、あなたのコールポイントカットのSpringコンテナから例外を取得するコード

にアスペクトアドバイスを織ります。しかしAspectJが織りなす織り方を望みます。次に、コンパイル時またはローディング時の織りのいずれかを使用する必要があります。コンパイル時の織り方は、プラグインによって提供される最も簡単な代替案です。

AspectJコンパイラは、AspectJもサポートする高度なJavaコンパイラとして見ることができます。コンパイルされたコードをどこでも実行することができます。

また、プラグインをコンパイルする必要はありません。たとえば、私がhereを示したように、Antタスクを使ってコンパイルすることができます。

しかし、最も簡単な方法は、プラグインを使用することです。これはまた私が簡単にhereを記述した余分な助けを与える。

こちらがお役に立てば幸いです。

+0

こんにちは、私の質問を編集しappconfig.xmlとjar情報を追加しました。悪いことがありますか?ちなみに、もし私がEclipseプラグインを使っているのなら、それはEclipse IDE上で動かすべきですか?アプリケーションをサーバーにデプロイしたいのですが? – asyard

+0

最後のセクションで、AspectJ製織の仕組みをより深く理解していただければ幸いです。 – Espen

+0

Espenに感謝、それは非常に便利です。 – asyard

関連する問題