Предупреждение советаDidNotMatch, когда я пытаюсь добавить новый совет к аспектуJ

Я пытаюсь добавить новый совет к моему аспекту 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]». !!


person aman_novice    schedule 26.09.2012    source источник
comment
Я знаю, что это старое, но все еще числится без ответа. Не могли бы вы принять и проголосовать за мой ответ, если он кажется уместным? Спасибо.   -  person kriegaex    schedule 09.06.2014


Ответы (1)


Ваша отредактированная версия по-прежнему не работает по двум причинам:

  • Simple.trial не public, как указано в вашем pointcut.
  • Почему get() pointcut должен совпадать, если вы никогда не читали член? В вашем коде есть только присваивание, т.е. будет соответствовать set() pointcut.

Попробуй это:

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);
    }
}
person kriegaex    schedule 29.09.2012