gpt4 book ai didi

spring - 为什么在切入点表达式中使用两个星号来匹配返回类型?

转载 作者:行者123 更新时间:2023-12-02 06:33:01 25 4
gpt4 key购买 nike

在Spring in Action一书中,我发现了以下AspectJ切点表达式:

@Pointcut("execution(** concert.Performance.perform(..))")
void performance();

这将指定切入点性能以包含名称为“perform”且返回类型可以为任意的方法。但请注意,它使用两个星号 (**) 来匹配返回类型,正如我所试验的那样,一个星号 (*) 可以完美完成这项工作,这意味着下面的行可以做同样的事情:

 @Pointcut("execution(* concert.Performance.perform(..))")
void performance();

而且我注意到许多 AspectJ 演示使用两个星号 (**) 来匹配“任何返回类型”,那么这样做有什么理由吗?使用一颗星来匹配“任意返回类型”有什么问题?

最佳答案

Spring documentation有助于更好地理解这一点。它说

Spring AOP users are likely to use the execution pointcut designator the most often. The format of an execution expression is:

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

第一部分modifiers-pattern是可选的,因为您可以看到它带有后缀?。这是为了指定方法的访问类型。

因此,在您的情况下,切入点表达式 execution(** Concert.Performance.perform(..)) 建议在类型 concert 上执行具有任何访问修饰符和任何返回类型的方法.Performance,方法名称为 perform,具有任何参数类型。

execution(* Concert.Performance.perform(..)) 的含义相同,其中第一个 * 是可选的,表示 perform 方法在接受任何类型参数的类型 concert.Performance 上,方法可以具有任何返回类型(带有可选的访问修饰符,这意味着访问修饰符可以是任何内容)。

关于spring - 为什么在切入点表达式中使用两个星号来匹配返回类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36717542/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com