Spring 这个执行切入点表达式是如何工作的?

Spring 这个执行切入点表达式是如何工作的?,spring,spring-aop,pointcut,Spring,Spring Aop,Pointcut,我遇到了一个来自@kriegaex的消息,我无法理解 我试图理解的切入点表达式如下 @Around("execution(* (@MyAnnotation *).*(..)) || execution(@MyAnnotation * *(..))") 据我所知,此表达式将建议使用@MyAnnotation 从中,执行表达式的格式如下所示: execution(modifiers-pattern? ret-type-pattern declaring-type-pattern?name-patt

我遇到了一个来自@kriegaex的消息,我无法理解

我试图理解的切入点表达式如下

@Around("execution(* (@MyAnnotation *).*(..)) || execution(@MyAnnotation * *(..))")
据我所知,此表达式将建议使用
@MyAnnotation

从中,执行表达式的格式如下所示:

execution(modifiers-pattern? ret-type-pattern declaring-type-pattern?name-pattern(param-pattern)
            throws-pattern?)
基于此格式,以下表达式

execution(* (@MyAnnotation *).*(..))
execution(@MyAnnotation * *(..))
可以解释为

ret-type-pattern is * 
declaring-type-pattern is any type with @MyAnnotation
name-pattern is *
param-pattern is ..
建议使用
@MyAnnotation
注释的类中的任何方法调用。如果我错了,请纠正我

对于这个表达式呢

execution(* (@MyAnnotation *).*(..))
execution(@MyAnnotation * *(..))

我无法理解
修饰符模式如何
@MyAnnotation
?这是怎么回事?

这是一个有趣的问题。有人在看文档,哇<代码>:)

文档维护在AspectJ中是一个问题,因为现在的开发主要是由Andrew(Andy)Clement执行的单人秀。他主要忙于跟上Java发布周期和新的语言特性,例如,已经有一个支持Java14的开发人员版本(记录类)

Spring网站上的语法描述取自它也指向的。虽然定义仍然有效,但编程指南是在Java 5之前的时代编写的,即很久以前,IMO从那时起就没有更新过。您可能会注意到,它甚至根本没有提到注释

所有与注释相关的内容都写在所谓的“注释”中,在这里你会发现一个小段落提到:

每个连接点都有一组修饰符-这些修饰符包括标准Java修饰符,如
公共
私有
静态
抽象
等,任何注释,以及方法和构造函数的
抛出
子句。这些修饰符是连接点主题的修饰符

因此,对于AspectJ,方法或类注释是它们的修饰符组的一部分,正如您已经正确指出的那样


更新:你可能想考虑投资Ramnivas Laddad的书。它也是老版本(2009年第二版),但以坚实的方式涵盖了AspectJ和SpringAOP的基础知识。这是一张截图,我希望Ramnivas和/或出版商不要为此起诉我。这是为了鼓励人们购买这本书:



更新2:看来现在整本书甚至可以免费。例如,屏幕截图中的章节是。

这是一个有趣的问题。有人在看文档,哇<代码>:)

文档维护在AspectJ中是一个问题,因为现在的开发主要是由Andrew(Andy)Clement执行的单人秀。他主要忙于跟上Java发布周期和新的语言特性,例如,已经有一个支持Java14的开发人员版本(记录类)

Spring网站上的语法描述取自它也指向的。虽然定义仍然有效,但编程指南是在Java 5之前的时代编写的,即很久以前,IMO从那时起就没有更新过。您可能会注意到,它甚至根本没有提到注释

所有与注释相关的内容都写在所谓的“注释”中,在这里你会发现一个小段落提到:

每个连接点都有一组修饰符-这些修饰符包括标准Java修饰符,如
公共
私有
静态
抽象
等,任何注释,以及方法和构造函数的
抛出
子句。这些修饰符是连接点主题的修饰符

因此,对于AspectJ,方法或类注释是它们的修饰符组的一部分,正如您已经正确指出的那样


更新:你可能想考虑投资Ramnivas Laddad的书。它也是老版本(2009年第二版),但以坚实的方式涵盖了AspectJ和SpringAOP的基础知识。这是一张截图,我希望Ramnivas和/或出版商不要为此起诉我。这是为了鼓励人们购买这本书:



更新2:看来现在整本书甚至可以免费。例如,屏幕截图中的章节是。

我自己永远不会找到这些信息。像
execution(*.*(@MyAnnotation)*(..)
这样的构造可能会让我更容易理解。谢谢!哈哈,难道你不认为我没有必要去寻找它吗。我最喜欢的一些工具,如Spock和Geb,有可选的单页文档版本,AspectJ没有。整个分散的类似手册和教程的信息需要通过大量信息进行重构和添加,这些信息只能在发行说明、单元测试和Bugzilla票据中找到。这将是一个地狱般的工作,尤其是结合使整个结构更容易浏览和搜索。当您在文档的一个子页上时,它就像一个兔子洞:我在哪里?如何再次退出?请注意我的更新和信息的书“AspectJ在行动中”。非常感谢!老实说,我的SpringAOP相关信息的主要来源是您在这个论坛上的帖子:)。谢谢!!我自己永远也找不到这些信息。像
execution(*.*(@MyAnnotation)*(..)
这样的构造可能会让我更容易理解。谢谢!哈哈,难道你不认为我没有必要去寻找它吗。我最喜欢的一些工具,如Spock和Geb,有可选的单页文档版本,AspectJ没有。整个零散的手册式和教程式的信息需要通过大量的信息进行重构和添加,这些信息只能在发行说明、单元测试和Bugzi中找到