为假人解释的AOP概念


19

有人可以为假人解释AOP概念吗:连接点,切点,编织等。

例如:方面: 跨越多个类的关注点的模块化。这意味着什么?

Answers:


15

将关注点视为功能组,例如日志记录,审核,安全性

这些功能在大多数代码中都存在过,但是它们并没有真正存在于我们的动物类->狗类中-它们是应该存在于许多类中的功能-它们是相互交叉的关注点

  • 一个连接点是在纵横码居然跑代码的地方。

  • 一个切入点是怎么说的jointpoint运行什么代码。

  • 编织 -是指编译器/系统采用您的常规代码并包括所有AOP代码以便触发正确的代码等时-可以认为这是额外的预编译步骤。

一个简单易懂的示例是:

  1. 我们希望跟踪所有方法调用以进行调试(即,我们希望查看以什么顺序调用了哪些方法)。
  2. 我们创建一个方面来记录调用方法时的名称
  3. 我们创建切入点,将切面与代码中的所有方法相关联。在大多数AOP框架中,您可以使用一些通配符轻松完成此操作
  4. 现在,我们记录了曾经调用的所有方法。

请注意,不同的实现和AOP框架之间的术语略有不同。


就像我在写冗长的答案一样!您更简洁,我喜欢。为了清晰起见,将对其进行少许编辑。
Martijn Verburg

谢谢,我应该学习格式化规则,不要忘记。
Jonno

使用Python装饰器或Lisp宏似乎很容易实现-是/否?
保罗·内森

@Paul-恐怕您提到的任何一种结构都不熟悉,而且快速的Google并没有给我足够的洞察力来回答这两种方法。
Jonno

@PaulNathan:动态语言中的AOP非常简单。可以在一个下午创建一个简单的AOP框架。在像Java这样的编译语言中,生活并不那么美好。
凯文·克莱恩

-1

顺序阅读

每个定义都基于先前的定义。

跨领域关注

在您的应用程序中到处(跨领域)都使您感到困扰(关注)的事情。例如日志或安全性

方面

在现有代码之前之后或两者之前(左右)自动添加的代码块

PointCut和JoinPoint

                  Application code
                           |
                           |
                           |
                           |
                          \|/
                           |
JoinPoint  ----------->("before" aspect, on the way in)  // just before your intercepted application code
Pointcut start--------> public String myMethod(params ...)
                   //your application code
Pointcut finish--------> return (foo)
JoinPoint  ----------->("after" aspect, on the way out)  // just after your intercepted application code
                           |
                          \|/
                           |
                           |
                           |
                  Application code

切入点

在代码执行中执行方面的一部分的地方。

JoinPoint

方面“连接”切入点的点。在“之前” joinPoint中,您可以访问参数,在“之后” joinPoint中,您可以访问返回值。如果抛出异常,则可能需要“ try-catch-finally”来处理或重新抛出它。

织造

在切入点周围添加方面的过程


谁将我的答案否决,请留下评论为什么-如果您不介意的话。我保证我不会对此争论。但是,我想知道我可以做得更好。谢谢!
Prashant
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.