2

このサイトで簡単なaopの例を実行してみます。私は春のaopとaspectj、aspectjweaverjarを持っています:

@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;
    }
}

この例を"AaBbCc".toLowerCase()のようにTest.javaで実行すると、この例外が発生します。

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'

Spring AOPには「呼び出し」が含まれていませんが、アスペクト指向ウィービングが機能しないのはなぜですか、アイデアはありますか?ありがとうございました。

編集:

私の春の設定ファイルには、@aspect注釈付きクラスとのBean定義しかありません<aop:aspectj-autoproxy />。私のjarファイルは次のとおりです:spring-aop-3.0.5、aopalliance、aspectjrt1.6.8、aspectjweaver1.5.0

4

1 に答える 1

2

AspectJ Eclipseプラグインを使用して織り込みを試みましたか? ( SpringSource Tool Suiteにも含まれています)

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

この設定では、少なくとも私にとってはうまくいきます。

更新: アスペクトのアドバイスをコードに織り込む

呼び出しポイントカットが原因で、Spring コンテナーから例外が発生します。しかし、AspectJ weavingweave アスペクトが必要です。次に、コンパイル時またはロード時のウィービングを使用する必要があります。コンパイル時のウィービングは、最も単純な代替手段であり、プラグインによって提供される代替手段です。

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

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

しかし、最も簡単な方法は、プラグインを使用することです。これにより、ここで簡単に説明した追加のヘルプも提供されます。

これが役立つことを願っています!

于 2011-06-29T15:20:55.893 に答える