目前,我正在研究AOP及其重要的部分,即建议、切入点、和连接点。我从这个链接中读到了一个非常容易理解的关于什么是咨询、和Pointcuts的解释。Aspect Oriented Programming vs. Object-Oriented Programming
但是,我很难理解连接点是什么。据我所读,连接点是程序结构中定义良好的位置,其中一个方面可以在其建议代码中编织。
但是,当谈到真正的例子时,我找不到任何好的例子来理解连接点的例子。
从上面链接中的例子中可以看出,如果下面写的是建议和切入点,那么我们应该在哪里定义连接点呢?
经典方法:
void set...(...) {
:
:
Display.update();
}建议:
after() : set() {
Display.update();
}潘切特:
pointcut set() : execution(* set*(*) ) && this(MyGraphicsClass) && within(com.company.*);发布于 2014-03-26 14:37:32
void set...(...)是连接点
如您所知,方面是Concern、Pointcut和Joinpoint的关联。
Concern对一个或多个涉众非常重要。此外,在概念上可以将关切分为两类(每类的实现可以是相同的):
A副作用:一个不改变连接点行为的关注点,而是引入额外的操作。
日志记录是副作用的一个很好的例子,
例如,对目标方法(这是连接点)的每个调用,BankWithdrawalHandler.Execute(ICommand command)将首先调用关注点LoggingConcern.Execute(ICommand command)
它将能够在Execute方法之前和之后运行,记录诸如开始时间/结束时间/总时间/输入参数/输出参数等事情。
副作用可以:
一个建议:可能会改变目标方法的输入和/或输出的关注点。
缓存问题是一个简单的例子--例如,每当运行时执行目标方法(这是连接点) Repository.Find<T>(long id)时,方法CacheConcern.Find<T>(long Id)将被配置为首先运行,并且只允许在缓存中找不到值时继续调用Repository.Find()方法。
一项建议可以:
在.NET中,有许多已建立的实现切入点的技术
https://stackoverflow.com/questions/22630208
复制相似问题