可以使用一个方面来衡量方法调用的性能,如下面的示例所示:
public aspect MonitorRequests {
void around() : monitoredRequestO {
PerfStats stats = getPerfStats(thisDoinPointStaticPart);
long start = System-currentTimeMillisO;
proceedO;
stats.ecunter++;
stats.time += System.currentTimeMillisC)-start;
}
pointcut monitoredRequestO :
execution(void HttpServ1et.do*(..)) && if(enabled);
// can expose stats via JMX, dump method, getstats etc.
public static class PerfStats { _. }
private Map<StaticPart,PerfStats> perfStatMap • //...
private boolean enabled;
}默认情况下,aspect实例与Java虚拟机相关联,而不是与特定的执行流相关联,类似于静态类。下面的另一个方面使用percflow()来关联一个不同于默认的方面实例:
public aspect MonitorDatabaseRequests
percflow(monitoredRequest() && !cflowbelow(mon-5toredRequest()) {
void around() : monitoredRequestO {
PerfStats stats = getPerfStats(thisJoinPointStaticPart);
long time.= System.currentTimeMi 11 i s O ;
proceed();
stats.counter++;
stats.databaseTime += accumulatedoatabaseTime;
stats.time 4= System.currentTimeMi 11 isO-time;
}
}在此示例中添加percflow()声明会有什么不同
我搞不懂percflow是如何工作的,以及这与不使用它有什么不同……
发布于 2011-06-17 00:20:13
percflow是方面实例化模型。查看此处:http://eclipse.org/aspectj/doc/released/progguide/quick-aspectAssociations.html
这意味着为输入的每个cflow创建该方面的一个实例。
第一个方面是单例,因此它必须为它跟踪的所有性能统计数据存储一个映射。第二个方面根据需要实例化,因此性能统计信息被隐式存储并与适当的动态调用图相关联。
https://stackoverflow.com/questions/6367956
复制相似问题