Spring AOP:JoinPoint 和 PointCut 有什么区别?

新手上路,请多包涵

我正在学习面向方面的编程概念和 Spring AOP。我无法理解 Pointcut 和 Joinpoint 之间的区别——它们对我来说似乎是一样的。 Pointcut 是您应用建议的地方,而 Joinpoint 也是我们可以应用我们的建议的地方。那有什么区别呢?

切入点的示例可以是:

 @Pointcut("execution(* * getName()")

什么可以是 Joinpoint 的示例?

原文由 Saurabh Patil 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.4k
2 个回答

连接点 连接点是应用程序 程序执行 中的一个 候选 点,可以在其中插入一个方面。这个点可以是调用的方法、抛出的异常,甚至是修改的字段。这些是可以将方面的代码插入到应用程序的正常流程中以添加新行为的点。

Advice: 这是一个对象,它包括对系统范围关注点的 API 调用,表示在点指定的连接点处执行的操作。

切入点: 切入点定义了应该在哪些连接点应用关联的建议。建议可以应用于 AOP 框架支持的任何连接点。当然,您不想在所有可能的连接点应用您的所有方面。切入点允许您指定要应用建议的位置。通常,您使用显式类和方法名称或通过定义匹配类和方法名称模式的正则表达式来指定这些切入点。一些 AOP 框架允许您创建动态切入点,这些切入点决定是否根据运行时决策应用建议,例如方法参数的值。

下图可以帮助你理解 Advice、PointCut、Joinpoints。在此处输入图像描述

资源

使用餐厅类比的解释: 来自@Victor 的来源

当您去一家餐厅时,您会查看菜单并看到几个可供选择的选项。您可以点菜单上的一项或多项。但在您真正订购它们之前,它们只是“用餐的机会”。一旦你点好菜,服务员端上桌,这就是一顿饭。

连接点是菜单上的选项,切入点是您选择的项目。

Joinpoint 是代码中的一个机会,供您应用一个方面……只是一个机会。一旦您抓住这个机会并选择一个或多个连接点并将一个方面应用到它们,您就得到了一个切入点。

来源 维基

Joinpoint 是程序控制流中的一个点,控制流可以通过 两条不同的路径 到达(IMO:这就是调用 joint 的原因)。

Advice 描述了一类修改其他函数的函数

切入点 是连接点的匹配 P 模式,即一组连接点。

原文由 Premraj 发布,翻译遵循 CC BY-SA 4.0 许可协议

要了解连接点和切入点之间的区别,请将切入点视为指定编织规则,将连接点视为满足这些规则的情况。

在下面的例子中,

   @Pointcut("execution(* * getName()")

Pointcut 定义规则说,建议应该应用于任何包中任何类中存在的 getName() 方法,连接点将是类中存在的所有 getName() 方法的列表,以便可以将建议应用于这些方法。

(在 Spring 的情况下,Rule 将仅应用于托管 bean,而通知只能应用于公共方法)。

原文由 Sujay Mumbaraddi 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题