Предупреждение "adviceDidNotMatch", когда я пытаюсь добавить новый совет к аспекту 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 и не могу разобраться в этом!!
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);
}
}