一些AOP术语的起源

时间:2017-05-15 04:21:50

标签: aop aspectj terminology

我认为此问题之前已被提出,但我无法立即找到相关的SO问题或其他地方的文章。

令我感到震惊的是,AOP中的某些术语相当奇怪。似乎我不是唯一的一个 - 例如,article注意到“不幸的是,AOP术语不是特别直观”。但是,我没有找到资源解释为什么它们不是更“直观”,如果可能的话。

更具体地说:我可以在某种程度上理解“方面”和“加入点” - 它们看起来足够具有描述性。但“切入点”和“建议”似乎有点奇怪。这些术语是如何产生的?

我认为了解这些术语的词源将有助于更好地记住它们,如果不能让我们对AOP设计师的想法有所了解。至少,我希望这能帮助我解决会议中“削减点”或“建议点”等无意义的事情......

2 个答案:

答案 0 :(得分:1)

语源学无济于事。你只需要学习术语。但至于有关如何使用某些术语的历史信息,可能您需要执行Web搜索,这对StackOverflow来说并不是一个问题。至少我找到了一些关于advice这个词的背景信息。

更新:实际上,您需要熟悉的技术术语并不多。以下内容来自我的一张AOP幻灯片。我使用它们是为了在开发人员时向开发人员介绍AOP:

什么是方面?

  • 方面包含以模块化方式实现跨领域关注的所有必要元素。所以,这就像一个关注核心问题的课程一样。
  • 一个方面可以像一个类一样包含某种称为建议和数据的“方法”。它可以是单例或多次实例化,具体取决于其用法。
  • 因为方面是独立于核心系统定义的,所以我们需要其他东西将其正交功能编织到核心代码中。这个东西被称为切入点,并确定应该在哪里应用建议,例如:在某些方法调用之前或之后,在异常时,创建对象时等等。
  • 核心代码中可能编入方面代码的任何地方或事件称为 joinpoint

如果你需要婴儿床或记忆钩,也许这有帮助(请注意斜体字):

  • 建议关于如何应用跨领域问题的核心代码的方面方法称为建议
  • 核心代码中的每个,您可以将其引入以应用横切关注点,称为 joinpoint
  • 您通过名为切入点的查询语法(如SQL选择表行)切断核心代码连接点的切片(或子集)。

我不知道这是否有用,但我希望如此。

答案 1 :(得分:1)

完全赞同你的挫败感。每个术语都有它的用途,但每次我必须处理AOP时,我有时必须更新每个术语的内容。

帮助我的是整个AOP基于可以应用于方法的方法拦截器的单一概念,可以决定是否需要对该方法调用采取操作并在该方法调用之前和之后应用自定义逻辑。

看看Springs org.aopalliance.intercept.MethodInterceptor及其继承层次结构。例如,建议实际上是MethodInterceptor的抽象定义,而切入点是选择应用该建议(或MethodIntercptor)的方法的逻辑。

据我所知,即使切入点只是另一个委托给方法拦截器的方法拦截器。