1

このポイントカットのフォーマットの問題は何ですか?

@Around("execution(* @myPackage.SafetyCritical.*(*))&& @annotation(deny)")

.i追加するのを忘れました:例外は「ポイントカットが整形式ではありません:「名前パターン」(&&の前の最後の閉じ括弧)を期待しています

たとえば、ポイントカットはこのクラスで機能するはずです。

@SafetyCritical
public class SecureClass
{

    public SecureClass(){

    }
    @Deny
    public void isNotAllowed(){
        System.out.println("This should not happen");

    }

    @Allow
    public void isAllowed(){
        System.out.println("Allowed");

    }

}
4

2 に答える 2

1

編集:

あなたが探しているポイントカット式は、もっと次のようになると思います。

@Around("@target(myPackage.SafetyCritical) && @annotation(denyPackage.Deny)")

指定子は、指定されたアノテーション@targetが付けられたクラスを照合するために使用され、指定子は@annotation、アノテーションが付けられたメソッドにフィルターをかけますdenyPackage.Deny

繰り返しになりますが、AspectJのサポートに関するSpringのドキュメントを確認すると便利です。

オリジナル:

To match on any number of arguments, the parameters definition passed to the execution pointcut designator should be '..'

@Around("execution(* myPackage.SafetyCritical.*(..)) && @annotation(deny)")

The Spring documentation has some examples of using this to denote accepting any number of arguments.

Also, I would venture to guess that that having the '@' symbol in front of your package name is not acceptable. You should remove it.

于 2011-12-12T12:20:22.073 に答える
0

注釈付きメソッドと一致させるために、次のようなポイントカット定義を使用しました。

@Around("execution(@myPackage.SafetyCritical * *(..)) && @annotation(deny)")

最後の部分@annotation(deny)(あなたがすでに知っているように、しかし他のいくつかはそうではないかもしれません)は、注釈を「deny」という名前のアドバイスメソッド引数にバインドすることです。

編集:あなたの更新によると、SafetyCriticalがクラスの注釈であることに気づいていませんでした。私はそれがtarget()の目標を持っていると思います:

@Around("execution(* *(..)) && @target(myPackage.SafetyCritical) && @annotation(deny)")
于 2011-12-12T12:38:55.157 に答える