我目前正在研究AOP及其重要部分,包括建议,切入点,和加入点。 我从这个链接中读到了一个非常容易理解的解释,即建议和切入点。 Aspect Oriented Programming vs. Object-Oriented Programming
但是,我很难理解加入点是什么。根据我的阅读,Join Points是程序结构中明确定义的位置,其中一个方面可以编织其建议代码。
但是,当它成为真实的例子时,我找不到任何好的例子来理解加入点的例子。
从上面链接中的示例中可以看出,如果Advice和Poincuts是下面的内容,那么我们定义加入点的位置是什么?
经典方法:
void set...(...) {
:
:
Display.update();
}
建议:
after() : set() {
Display.update();
}
Poincuts:
pointcut set() : execution(* set*(*) ) && this(MyGraphicsClass) && within(com.company.*);
答案 0 :(得分:2)
void set...(...)
加入点
如您所知关注是关注,切入点和关联点的关联
关注对一个或多个利益相关方来说非常重要。另外,关注点在概念上可以分为两类(每种类型的实现可以是相同的):
副作用:一种不会改变连接点行为的问题,而是引入其他操作。
记录问题是副作用的一个很好的例子,
e.g。每次调用目标方法(这是连接点)BankWithdrawalHandler.Execute(ICommand command)
将首先调用关注点LoggingConcern.Execute(ICommand command)
可以在Execute
方法之前和之后运行,记录诸如开始时间/结束时间/总时间/参数/输出参数等内容。
副作用可以:
建议:可能会改变目标方法的输入和/或输出的问题。
缓存问题是一个简单的例子 - 例如每当运行时执行目标方法(这是连接点)Repository.Find<T>(long id)
时,方法CacheConcern.Find<T>(long Id)
将被配置为首先运行,并且只允许调用继续到Repository.Find()
方法,如果在缓存中找不到该值。
建议可以:
在.NET中,有许多用于实现切入点的已建立技术: