2

私は自分のアスペクトJに新しいアドバイスを追加しようとしています.

public aspect Aspect11 {

    pointcut namePC(String s, int i) : call (public String Simple.getName(String, int))&&args(s,i);

    pointcut getData(int j) : get(public int Simple.trial)&&args(j);

    after(String s, int i) : namePC(s, i) {
        // this is the advice
        System.out.println("Printing..." + s + "   " + i);
        System.out.println(thisJoinPoint.getSignature());
    }

    before(int j):getData(j)
    {
        System.out.println(j);
    }
}

上記のコードでは、pointcut namePC() とそのアドバイスが既に追加されています。これは期待どおりに機能していました。

以下は私のSimple.javaです

public class Simple {
private String name = "Aman";
String home;
int trial;
public String getName(String s, int i) {

    System.out.println("Hi in getName()" + s + "   " + i);
    return name;
}

public static void main(String args[]) {
    Simple simple = new Simple();
    simple.trial=8;
    System.out.println("AA" + simple.getName("In Simple", 1));
}

}

新しいポイントカットとそのアドバイスを追加しようとすると:getData()、警告が表示されます:「Aspect11で定義されたアドバイスが適用されていません[Xlint:adviceDidNotMatch]」AspectJを初めて使用し、これを整理する方法がありません!!

4

1 に答える 1

4

編集したバージョンは、次の 2 つの理由でまだ機能しません。

  • Simple.trialpublicあなたのポイントカットの状態ではありません。
  • メンバーから読み取ったことがないのに、なぜget()ポイントカットが一致する必要があるのですか? あなたのコードには割り当てしかありません。つまり、set()ポイントカットが一致します。

これを試して:

public class Simple {
    private String name = "Aman";
    private int trial;

    public static void main(String args[]) {
        Simple simple = new Simple();
        simple.trial = 8;
        System.out.println(simple.getName("foo", 1));
    }

    public String getName(String s, int i) {
        System.out.println("getName(" + s + ", " + i + ")");
        return name;
    }
}

public aspect Aspect11 {
    pointcut namePC(String s, int i) :
        call (public String Simple.getName(String, int)) && args(s,i);

    pointcut setData(int j) :
        set(int Simple.trial) && args(j);

    after(String s, int i) : namePC(s, i) {
        System.out.println("namePC: " + thisJoinPoint.getSignature());
    }

    before(int j) : setData(j) {
        System.out.println("setData: " + j);
    }
}
于 2012-09-29T08:49:10.103 に答える