Я хотел бы зарегистрировать время выполнения некоторых методов в моих контроллерах.
Прямо сейчас я просто пытаюсь выяснить, поэтому я не регистрирую, но печатаю, и это для всех методов.
У меня есть класс Profiler:Как использовать AOP в WildFly 8.2
@Aspect
public class Profiler {
@Pointcut("execution(public * *(..))")
public void methods() {}
@Around("methods()")
public Object logExecutionTime(ProceedingJoinPoint joinPoint) throws Throwable {
long start = System.currentTimeMillis();
Object result = joinPoint.proceed();
System.out.println(joinPoint.getSignature() + " " + (System.currentTimeMillis() - start));
return result;
}
}
Мой pom.xml содержит aspectjrt версии 1.8.5
Я не использую Spring.
Я пробовал десятки комбинаций аннотаций, таких как @Provider, @ApplicationScoped, @Initialized (ApplicationScoped.class), @Named.
Я пытался использовать javax.ws.rs.core.Application, JBoss-aop.xml и т.д.
Ничего не работает (но без ошибок) :-(
Спасибо за вашу помощь.
Итак, я теряю выгоду от необходимости изменять какие-либо классы в моих проектах? –
Вы можете написать расширение CDI, чтобы программным путем добавлять перехватчики в свои классы. - Однако, если все, что вы хотите сделать, - это однократное ведение журнала с помощью point point point AOP, то я полагаю, что этот вопрос сводится к ткачеству ваших классов способом, совместимым с WildFly. Что вы делали, чтобы сплести свои классы, или вы предположили, что WildFly сделает это автоматически? –
Я ничего не предполагал ;-) Я новичок в WildFly, я работал с Spring + Tomcat/Jetty (что я предпочитаю гораздо больше). Я использовал Spring AOP + AspectJ так 1 класс для @Aspect (как тот, который был в моем вопросе), и я был сделан, не нужно изменять существующий код. –