为什么 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 中。
无论如何请尽量坚持正确的语法。
我正在学习 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 中。
无论如何请尽量坚持正确的语法。