我正在尝试向我的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);
}
}
在上面的代码中,已经添加了切入点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的新手,并没有办法解决这个问题!!
答案 0 :(得分:4)
您编辑的版本仍然无法正常工作:
Simple.trial
不是public
,因为你的切入点状态。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);
}
}