Аспект может быть использован для измерения производительности вызовов методов,
как показано в примере ниже:
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;
}
По умолчанию экземпляр аспекта связан с виртуальной машиной 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 работает и чем он отличается от неиспользования ....