在面向方面的编程语言中如何使用切入点将功能添加到现有程序中?
据我了解,来自这篇维基百科文章 - http://en.wikipedia.org/wiki/Pointcut
切入点被放置在一段代码中的特定位置,当到达该点时,基于对切入点的评估,可以根据切入点的评估在代码中某处的特定点执行更多代码。这是一个正确的理解吗?
如果是这样,那么这将增加功能,因为程序员可以根据该评估执行不同的代码。
在面向方面的编程语言中如何使用切入点将功能添加到现有程序中?
据我了解,来自这篇维基百科文章 - http://en.wikipedia.org/wiki/Pointcut
切入点被放置在一段代码中的特定位置,当到达该点时,基于对切入点的评估,可以根据切入点的评估在代码中某处的特定点执行更多代码。这是一个正确的理解吗?
如果是这样,那么这将增加功能,因为程序员可以根据该评估执行不同的代码。
例如,我有一个包含许多服务对象的应用程序,我想为每个方法计时。使用 AspectJ 表示法:
class MyAspect
{
@Around("execution(public * my.service.package.*(..))")
public Object aroundAdvice(JoinPoint jp)
{
// start timer
Object o = jp.proceed();
// stop timer, etc.
return o;
}
}
这里,“execution(public * my.service.package.*(..))”是切入点:它指定了将执行通知的连接点集合(执行所有类中的所有方法)服务包)。
切入点是连接建议(“纯”代码片段,不关心它将在哪里运行)和连接点(执行点,如方法调用或返回,不关心将运行什么代码)。
我会调用切入点一个谓词函数,它选择哪些连接点将与当前方面一起使用(谓词为每个建议的每个连接点提供真/假)。