当前位置: 首页 > 知识库问答 >
问题:

如何使不正确的切入点表达式引发异常?

冯玮
2023-03-14

我有以下切入点表达式:

@pointcut(“execution(*apply(..))”)

共有1个答案

满子实
2023-03-14

安东尼奥是百分之百正确的,这里没有错误。切入点只是说:“如果您碰巧找到与此描述匹配的joinpoints,请在那里应用我的方面建议”。

  • Joinpoint匹配是在Spring AOP的运行时完成的。所以它是一个内在的动态的东西。
  • 对于具有加载时编织(LTW)的AspectJ也是如此。classloader总是有机会加载新的类,然后根据织入其中的切入点和方面代码动态匹配这些类。因此,您永远无法知道您已经“完成”了方面编织。何时发出警告或错误?
  • 如果将AspectJ与编译时编织(CTW)一起使用,如果在编译过程中一个建议的切入点根本无法匹配任何连接点,AspectJ编译器将发出警告xlint:advicedidNotmatch。但是想想看,它不可能仅仅是一个信息或警告,因为如果您编译了一个方面模块,然后希望应用于多个应用程序或一个应用程序中的其他模块,无论您是使用CTW还是LTW,匹配的连接点只有在稍后编织这些模块时才会找到。

所以这是没有错误的,否则您永远不能使用方面库或LTW。方面的全部思想是它们独立于应用程序代码。

Stultuske匹配注释而不是方法名的想法被我称为“穷人的AOP方法”,因为它仍然将与AOP相关的信息分散在整个代码库中,因此没有实现AOP的promise,即不仅消除代码纠缠,而且消除分散。这种分散现在只适用于注释,而不是内联方法代码。我个人最喜欢AOP,如果您根本没有在应用程序代码中看到它,除非您希望以声明方式应用某些特性,并且出于某种原因在源代码中使用注释将其记录下来,例如@transactional。但这是一个品味问题,我可能仍然会尝试将声明放入方面切入点中,而不是应用程序中。只有当整个匹配模式太复杂而无法在切入点中处理时,我才可以使用注释来代替。链接注释和方面的广泛实践,甚至使某种“AOP设计模式”被误导,从而被过度使用,IMO。这种模式有它的好用途,但远比我看到的要少得多。

 类似资料:
  • 我在我的Scala项目中使用带有sbt-aspectj的AeyJ库。我正在尝试使用表达式编写: 但我有以下例外: 以下AspectJ教程介绍: 因此,通过注释样式,可以仅在@pointcut表达式中使用if()切入点。if()不能包含任何正文。然后,带注释的@切入点方法必须是公共静态布尔的形式,并且可以像往常一样使用形式绑定 可以在Scala方法上使用切入点中的if()表达式吗?

  • 问题内容: 考虑以下代码片段: 输出量 这种方法可能有什么问题?如果错了,那么找到确切的单词匹配的正确解决方案是什么? PS:我在这里发现了许多类似的问题,但没有一个提供我正在寻找的解决方案。提前致谢。 问题答案: 当您使用该方法时,它试图匹配整个输入。在您的示例中,输入 “ Print this” 与模式不匹配,因为单词 “ Print” 不匹配。 因此,您需要在正则表达式中添加一些内容以匹配字

  • 请考虑以下代码段: 输出 这种方法可能有什么问题?如果是错误的,那么找到精确匹配的单词的正确解决方案是什么? 附言:我在这里发现了许多类似的问题,但没有一个能提供我想要的解决方案。提前谢谢。

  • 问题内容: 我如何写一个等于的lambda表达式: 不允许以下内容: 问题答案: 皮肤化Python的方法不止一种: Lambda接受语句。既然是一条语句,您可以编写一个通用的提升器: 但是,如果您的目标是避免使用,则显然不能削减它。但是,它确实允许您有条件地引发异常,例如: 另外,您可以在不定义命名函数的情况下引发异常。您所需要的只是强健的腹部(给定的代码是2.x): 和python3 强健胃部

  • 问题内容: 是否有一种方法(或使用其他命令)使用NO正则表达式来查找确切的字符串? 例如,如果我要搜索(字面意思): 我不想经历并逃避每个“逃脱”的机会。本质上,我想像通过以下那样通过它: 问题答案: 使用,它与(匹配固定字符串)相同。

  • 我从@kriegaex那里得到了一个答案,我无法理解。 我试图理解的切入点表达式如下 据我所知,此表达式将建议使用MyAnnotation注释的任何类或方法 从引用留档中,表达式的格式如下: 基于此格式,以下表达式 可以解释为 建议使用注释的类中的任何方法调用。如果我错了,请纠正我。 对于这个表达式 我无法理解修饰符模式如何可以是MyAnnotation?这是怎么回事?