我正在学习面向方面的编程概念和 Spring AOP。我无法理解 Pointcut 和 Joinpoint 之间的区别——它们对我来说似乎是一样的。 Pointcut 是您应用建议的地方,而 Joinpoint 也是我们可以应用我们的建议的地方。那有什么区别呢?
切入点的示例可以是:
@Pointcut("execution(* * getName()")
什么可以是 Joinpoint 的示例?
原文由 Saurabh Patil 发布,翻译遵循 CC BY-SA 4.0 许可协议
连接点 : 连接点是应用程序 程序执行 中的一个 候选 点,可以在其中插入一个方面。这个点可以是调用的方法、抛出的异常,甚至是修改的字段。这些是可以将方面的代码插入到应用程序的正常流程中以添加新行为的点。
Advice: 这是一个对象,它包括对系统范围关注点的 API 调用,表示在点指定的连接点处执行的操作。
切入点: 切入点定义了应该在哪些连接点应用关联的建议。建议可以应用于 AOP 框架支持的任何连接点。当然,您不想在所有可能的连接点应用您的所有方面。切入点允许您指定要应用建议的位置。通常,您使用显式类和方法名称或通过定义匹配类和方法名称模式的正则表达式来指定这些切入点。一些 AOP 框架允许您创建动态切入点,这些切入点决定是否根据运行时决策应用建议,例如方法参数的值。
下图可以帮助你理解 Advice、PointCut、Joinpoints。
资源
使用餐厅类比的解释: 来自@Victor 的来源
当您去一家餐厅时,您会查看菜单并看到几个可供选择的选项。您可以点菜单上的一项或多项。但在您真正订购它们之前,它们只是“用餐的机会”。一旦你点好菜,服务员端上桌,这就是一顿饭。
连接点是菜单上的选项,切入点是您选择的项目。
Joinpoint 是代码中的一个机会,供您应用一个方面……只是一个机会。一旦您抓住这个机会并选择一个或多个连接点并将一个方面应用到它们,您就得到了一个切入点。
来源 维基: