切入点和面向切面编程

4
在面向切面编程语言中,如何使用切点向现有程序添加功能?
据我了解,从这篇维基百科文章 - http://en.wikipedia.org/wiki/Pointcut,切点被放置在代码的特定位置,在到达该点时,根据切点的评估,可以在代码的某个特定点执行更多的代码。如果这种理解是正确的,那么它可以添加功能,因为程序员可以根据该评估执行不同的代码片段。
2个回答

2
例如,我有一个包含多个服务对象的应用程序,我想计算每个方法的时间。使用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.*(..))”是切入点:它指定了将执行建议的连接点集(在服务包中的所有类的所有方法的执行)。

0

Pointcut 是连接通知(“纯”代码片段,不关心它将在何处运行)和连接点(执行点,如方法调用或返回,不关心将运行哪些代码)的东西。

我会称 pointcut 为谓词函数,它选择将与当前方面一起使用的连接点(为每个通知为每个连接点提供 true/false 的谓词函数)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接