我正在学习SpringAOP,当我运行基本程序时,我观察到eclipse(当然是编译器)的奇怪行为。
当我练习 @Pointcut 注释时,我错误地在 Pointcut 表达式中添加了另一个括号。令人惊讶的是,我在运行时没有收到任何错误。此外,它的工作原理就像魅力一样。它甚至不关心我在末尾添加了多少个圆括号。如果我更改该表达式中的任何其他语法,它会弹出一个错误..
这里有语法错误..
@Pointcut("execution(* com.kish.DAO.*.*(..))))))")
public void forPointcut() {}
我使用了 @Before Advices 的切入点表达式引用。
@Before("forPointcut()")
public void beforeAddAccountant() {
System.out.println(" \n----->>>>> exceuting @Before advice before adding accountant");
}
@Before("forPointcut()")
public void otherLoggers() {
System.out.println("----->>>>> execution @Pointcut references before methods\n");
}
谁能告诉我这里发生了什么?
最佳答案
是的,我可以。 AspectJ 切入点解析器在这里很宽松,就这么简单。这是因为它应该由 AspectJ 编译器使用,并且我们有更彻底的检查来产生语法错误。但是,当 Spring AOP 使用时,解析后不会进行进一步的检查,因为不会生成字节码。其效果是第一个多余的右括号之后的所有内容都被转储,例如
execution(* *(..)))))) && !target(java.lang.String)
变成了
execution(* *(..))
在 Spring AOP 中。
无论如何,请尝试坚持正确的语法。
关于java - 为什么 Spring AOP @pointcut 中的这个语法错误没有弹出任何错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53397837/