2012-09-26 1 views
1

J'essaie d'ajouter un nouveau conseil à mon aspectJ.avertissement "conseilDidNotMatch" lorsque j'essaie d'ajouter un nouveau conseil à un aspectJ

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

Dans le code ci-dessus, le nom pointcutPC() et ses conseils ont déjà été ajoutés. Cela fonctionnait comme prévu.

Après est mon 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)); 
} 

}

Lorsque je tente d'ajouter la nouvelle coupe de point et son conseil: getData(), je reçois un avertissement: « conseil défini dans Aspect11 a Je n'ai pas été appliqué [Xlint: adviceDidNotMatch] " Je suis nouveau sur AspectJ et je n'arrive pas à résoudre ce problème !!

+0

Je sais que celui-ci est vieux, mais toujours considéré comme sans réponse. Voulez-vous s'il vous plaît accepter et upvote ma réponse si cela semble approprié? Merci. – kriegaex

Répondre

4

Votre version modifiée ne fonctionne toujours pas pour deux raisons:

  • Simple.trial n'est pas public que vos états point d'action.
  • Pourquoi un pointcut get() doit-il correspondre si vous n'avez jamais lu le membre? Dans votre code, il n'y a qu'une affectation, c'est-à-dire que le pointcut set() correspondra.

Essayez ceci:

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); 
    } 
} 
Questions connexes