为什么 Spring AOP @pointcut 中的这个语法错误没有弹出任何错误?

Why this syntax error in SpringAOP @pointcut not popping any Error?

我正在学习 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 中。

无论如何请尽量坚持正确的语法。