首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >面向方面编程中的连接点

面向方面编程中的连接点
EN

Stack Overflow用户
提问于 2014-03-25 09:26:06
回答 1查看 925关注 0票数 2

目前,我正在研究AOP及其重要的部分,即建议、切入点、连接点。我从这个链接中读到了一个非常容易理解的关于什么是咨询、Pointcuts的解释。Aspect Oriented Programming vs. Object-Oriented Programming

但是,我很难理解连接点是什么。据我所读,连接点是程序结构中定义良好的位置,其中一个方面可以在其建议代码中编织。

但是,当谈到真正的例子时,我找不到任何好的例子来理解连接点的例子。

从上面链接中的例子中可以看出,如果下面写的是建议和切入点,那么我们应该在哪里定义连接点呢?

经典方法:

代码语言:javascript
复制
void set...(...) {
    :
    :
    Display.update();
}

建议:

代码语言:javascript
复制
after() : set() {
   Display.update();
}

潘切特:

代码语言:javascript
复制
pointcut set() : execution(* set*(*) ) && this(MyGraphicsClass) && within(com.company.*);
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-03-26 14:37:32

void set...(...)连接点

如您所知,方面ConcernPointcutJoinpoint的关联。

  • 横切关注点的实现称为 concern
  • 在需要附加关注点的类中,定义良好的位置是连接点
  • 通过配置或代码指定连接点的位置是切入点

Concern对一个或多个涉众非常重要。此外,在概念上可以将关切分为两类(每类的实现可以是相同的):

A副作用:一个不改变连接点行为的关注点,而是引入额外的操作。

日志记录是副作用的一个很好的例子,

例如,对目标方法(这是连接点)的每个调用,BankWithdrawalHandler.Execute(ICommand command)将首先调用关注点LoggingConcern.Execute(ICommand command)

它将能够在Execute方法之前和之后运行,记录诸如开始时间/结束时间/总时间/输入参数/输出参数等事情。

副作用可以:

  • 根据需要在目标切入点检查/捕获输入参数,并执行任何附加处理
  • 根据需要在目标切入点检查/捕获输出结果,并执行任何附加处理

一个建议:可能会改变目标方法的输入和/或输出的关注点。

缓存问题是一个简单的例子--例如,每当运行时执行目标方法(这是连接点) Repository.Find<T>(long id)时,方法CacheConcern.Find<T>(long Id)将被配置为首先运行,并且只允许在缓存中找不到值时继续调用Repository.Find()方法。

一项建议可以:

  • 检查目标切入点处的输入参数,并在需要时修改它们
  • 取消或避免执行目标方法,并将其替换为不同的实现
  • 检查目标方法的输出结果,并根据需要修改或替换它

在.NET中,有许多已建立的实现切入点的技术

  • Post build IL编织/PostSharp
  • 依赖反转(控制反转(IoC)和依赖反转(DI))
  • 拦截/动态
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22630208

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档