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

标签 java spring annotations spring-aop pointcut

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

相关文章:

在 weblogic 上调用 SOAP 服务的 Java Web 应用程序在生产中不稳定

spring - @ContextConfiguration如何同时使用基于XML的配置和基于Java的配置?

java - 使用 Jaxb API 将 XML 解码为 Java 对象时获取 NullPointerException

java - 在扩展类上声明proporder

java - 保存类别时如何设置父类别?

java - 从命令行执行第三方 Jar,标记为忽略 SSL 问题?

java - Android 和计算机之间的串行 USB 连接连接错误

java - Spring Boot JPA ManyToMany MappingException

java - 使用 application.yml 中的属性从 spring data mongodb 注入(inject) @Document 中的集合名称

java - 哪个 lombok 注释最适合 JPA 实体?