这个执行切入点表达式是如何工作的? [英] How does this execution pointcut expression work?

查看:0
本文介绍了这个执行切入点表达式是如何工作的?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我遇到一个来自@kriegaex的answer,我无法理解。

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

@Around("execution(* (@MyAnnotation *).*(..)) || execution(@MyAnnotation * *(..))")

据我所知,此表达式将建议使用@MyAnnotation

注释的任何类或方法

reference documentation开始,execution表达式的格式如下:

execution(modifiers-pattern? ret-type-pattern declaring-type-pattern?name-pattern(param-pattern)
            throws-pattern?)

基于此格式,以下表达式

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

可以解释为

ret-type-pattern is * 
declaring-type-pattern is any type with @MyAnnotation
name-pattern is *
param-pattern is ..

建议使用@MyAnnotation注释的类中的任何方法调用。如果我错了,请纠正我。

和此表达式

execution(@MyAnnotation * *(..))
我无法理解modifiers-pattern如何可以是@MyAnnotation?这是如何工作的?

推荐答案

这是一个有趣的问题。有人正在阅读文档,哇!:)

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

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

所有与注释相关的内容都写在所谓的The AspectJ 5 Development Kit Developer's Notebook中,其中有一小段提到:

每个连接点都有一组修饰符--包括publicprivatestaticabstract等标准Java修饰符、任何注释以及方法和构造函数的throws子句。这些修饰语是连接点的主题的修饰语。

所以For AspectJ方法或类注释是它们的修饰符组的一部分,正如您已经正确地注意到的。


更新:您可能需要考虑投资Ramnivas Laddad的"AspectJ in Action"这本书。它也很旧(2009年的第二版),但以可靠的方式涵盖了AspectJ和Spring AOP的基础。这是一张截图,我希望兰尼瓦斯和/或出版商不要为此起诉我。这是为了激励人们购买这本书:


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

这篇关于这个执行切入点表达式是如何工作的?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆