Почему я не могу обернуть выполнение запроса советом @Around?

Я работаю над REST API и хотел бы провести очень простые тесты, чтобы узнать, сколько времени занимает обработка запроса.

Я мог бы сделать это с помощью завитка, но я хотел бы только время приложения (а не задержку, сеть и т. д.).

Я выбрал AspectJ для этого. Я уверен, что есть и другие инструменты, но я выбрал AspectJ, чтобы узнать что-то новое.

Первый; приведенный ниже фрагмент кода работает. То beforeAdviceи afterAdvice работает нормально и выводит время выполнения.

      @Configuration
public class AOPConfig {

    @Aspect
    @Component
    public class ResourceAspect {

        @Before(value = "execution(public * com.example.api.web.resource..*.*(..))")
        public void beforeAdvice(JoinPoint joinPoint) {
            System.setProperty("now", System.currentTimeMillis() + "");
        }

        @After(value = "execution(public * com.example.api.web.resource..*.*(..))")
        public void afterAdvice(JoinPoint joinPoint) {
            long then = Long.parseLong(System.getProperty("now"));
            System.out.println(System.currentTimeMillis() - then);
        }
    }

}

Теперь я хотел бы подключиться к обработке запросов как можно раньше. Итак, я решил, что могу обернуть выполнение:

  • org.apache.coyote.http11.Http11Processor.process() или
  • org.apache.catalina.connector.CoyoteAdapter.service()

Ниже не работает (ничего не печатается):

      @Configuration
public class AOPConfig {

    @Aspect
    @Component
    public class ResourceAspect {

        //@Around(value = "execution(public * org.apache.coyote.http11.Http11Processor.process(..))")
        @Around(value = "execution(* org.apache.catalina.connector.CoyoteAdapter.service(..))")
        public Object around(final ProceedingJoinPoint joinPoint) throws Throwable {
            try {
                System.out.println("BEGIN");
                return joinPoint.proceed();

            } finally {
                System.out.println("END");
            }
        }
}

Глядя на эту трассировку стека, я подумал, что могу обернуть либо Http11Processorили CoyoteAdapter с участием .

Есть ли ограничение на классы, с которыми я могу работать, или есть что-то еще, чего мне не хватает, чтобы получить @Around совет выше для работы?

0 ответов

Другие вопросы по тегам