我正在使用带注释的AspectJ,并试图找到如何禁用所有AspectJ的建议,以停止从用户的输入建议方法(例如,Boolean tracked = false)。
这是我的主类代码。
package testMaven;
public class MainApp {
public static void main(String[] args) {
testing test = new testing();
test.aa(1000);
test.setDd(3);
}
}
这是Aspect注释类。
package testMaven;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.aspectj.lang.annotation.Before;
@Aspect
public class aspecter {
public aspecter(){
}
boolean tracked = false;
@Before("execution(* testMaven.testing.aa(..)) && if(tracked)")
public void testBefore(){
System.out.println("yooi");
}
@Before("execution(* testMaven.testing.setDd(..)) && if(tracked) ")
public void testBefore2(){
System.out.println("yooi2");
}
}
if(tracked)将给出“令牌上的语法错误”执行错误(* testMaven.testing.aa(..))&& if(tracked)“,”在注释样式中,如果(...)切入点不能包含代码。使用if()并将代码放在带注释的方法“expected”中。
无论如何我可以根据我的规范指定if()方法吗?
由于
答案 0 :(得分:4)
如果使用注释样式,则必须以不同的方式执行操作,如文档所述(https://eclipse.org/aspectj/doc/released/adk15notebook/ataspectj-pcadvice.html)。在您的情况下,您的方面必须是这样的:
static boolean tracked = false;
@Pointcut("if()")
public static boolean tracked() {
return tracked;
}
@Before("execution(* testMaven.testing.aa(..)) && tracked()")
public void testBefore(){
System.out.println("yooi");
}
@Before("execution(* testMaven.testing.setDd(..)) && tracked() ")
public void testBefore2(){
System.out.println("yooi2");
}
请注意,代码样式方面通常会进入if(...)
子句的代码现在位于方法体中,使用@Pointcut
标记为if()
。我确实必须让场地保持静止。您可以修改tracked()
方法中的代码,以使用Aspects.aspectOf()
来保持非静态。