Я сделал метод профилирования:
@Around("tld.mycompany.business.aspects.SystemArchitecture.inServiceLayer() && !tld.mycompany.business.aspects.SystemArchitecture.publicConstructor()")
public Object profileBusiness(ProceedingJoinPoint pjp) throws Throwable {
try {
long start = System.currentTimeMillis();
String name = pjp.getSourceLocation().toString() + " " + pjp.getSignature().getName();
Object output = pjp.proceed();
long elapsedTime = System.currentTimeMillis() - start;
if(elapsedTime > 100)
System.err.println("TimerAspect: Businessmethod " + name + " execution time: " + elapsedTime + " ms.");
return output;
} catch (Exception ex) {
ex.printStackTrace(System.err);
throw ex;
}
}
И определил точки в tld.mycompany.business.aspects.SystemArchitecture как
@Pointcut("execution(public new(..))")
public void publicConstructor() {}
и
@Pointcut("within(tld.mycompany.business..*Impl) &&
!execution(private * tld.mycompany.business.*.dataType()) &&
!handler(java.lang.Exception)")
public void inServiceLayer() {}
Я хочу профилировать все методы в моем сервисном слое, которые не являются конструкторами и исключениями (так что я не получаю "при инициализации не поддерживается (ограничение компилятора)" и "при предварительной инициализации не поддерживается"(ограничение компилятора) "предупреждений" и игнорируйте dataType (), который я получил в нескольких.
Однако я все еще получаю предупреждения о конструкторе и исключениях.Также кажется, что это совет для любого метода Java, поэтому отладка моего приложения стала почти невозможной, так как я нашел много советов для каждой строки.«Затмение» говорит мне, что у него только 2747 советов по профилю бизнес-линии.
Очевидно, что я что-то неправильно понял, но что?Как я могу сделать это, чтобы быть рядом со всеми методами (кроме конструкторов) в классах в иерархии tld.mycompany.business, которые заканчиваются Impl?
Cheers
Nik