我是AspectJ的新手,仍然热衷于编写代码。
我正在尝试为nextYear()方法设置切入点和建议,但我一直收到“警告:(39,0)ajc:ChristkindAspect中定义的建议尚未应用[Xlint:adviceDidNotMatch]”。我了解这可能是因为未直接创建对象,并且我无法使用target(christkind enter code here
),但找不到解决方案。有人可以帮忙吗?预先谢谢你!
pointcut nextYear(Christkind christkind, Population population):
call(* *Christkind.nextYear(Population))&& args(population) &&
target(christkind);
before(Christkind christkind,Population population): nextYear(christkind,population) {
System.out.println("New Year");
populationSize(population);
numbOfWIshes(population);
//wishStrength(population); }
在主要方法中,我有:
Christkind.nextYear(population);
答案 0 :(得分:0)
警告Xlint:adviceDidNotMatch
意味着您方面中的切入点未找到方面weaver或编译器范围内的代码与之匹配。因此,有问题的建议未应用于(即编织为)目标应用程序代码。
在屏幕快照中,我看到目标方法是静态的,主方法调用它的方式也暗示:
Christkind.nextYear(population);
target()
切入点指示符检查目标对象是否是您指定的对象的实例。但是对于静态方法,没有实例,因此名称为静态方法,而不是实例方法。因此,您的切入点将不匹配。因此,要么使您的方法成为非静态方法(如果您想对目标实例对象进行操作),要么需要使用另一个切入点指示符,例如within(Christkind)
。似乎您甚至没有在建议代码中使用假定的Christkind
实例,而只是使用Population
实例。因此,只需去除target()
部分或将其替换为within()
。
可以随时提出相关的(!)后续问题。
答案 1 :(得分:0)
before(): execution(* Packages.*.*(..))
{
//packages is com
System.out.println(" TEST");
}
尝试此方法以找到正确的建议