AOP не вызывается аннотацией - PullRequest
0 голосов
/ 05 мая 2018

Я пытаюсь вызвать метод AOP для каждого метода, помеченного @ Timed.

Мой АОП MyTracer.java

@Aspect
public class MyTracer {

  private static final Tracer tracer = Tracing.getTracer();
  private static final Logger log = Logger.getLogger(MyTracer.class.getName());

  @Around("@annotation(timed)")
  public Object trackExecutionTime(ProceedingJoinPoint proceedingJoinPoint, Timed timed) throws Throwable {
    String methodName = proceedingJoinPoint.getSignature().getName();
    log.info("Using AOP for method name" + methodName); 
    log.info("Using AOP for param name" + timed.label()); 
    return output;
    }
  }
}

Моя аннотация

Timed.java

@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface Timed {
  String label() default "label";
}

Наконец-то мой бизнес-код

HelloWorld.java

  @Override
  @Timed(label = "myMetrics")
  public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
    log.info("Servlet called");
    PrintWriter out = resp.getWriter();
    out.println("Hello, world - Flex Servlet");
  }

Во время выполнения я получаю журналы от сервлетов, но не от класса MyTracer.

1 Ответ

0 голосов
/ 05 мая 2018

Хорошо, я понял это. В build.gradle отсутствовало следующее. Я заменил

compile group: 'org.aspectj', name: 'aspectjtools', version: '1.6.2' 

с

buildscript {
  repositories {
    maven {
      url "https://plugins.gradle.org/m2/"
    }
  }
  dependencies {
    classpath "gradle.plugin.aspectj:gradle-aspectj:0.1.6"
  }
}

project.ext {
  aspectjVersion = "1.8.2"
}

apply plugin: "aspectj.gradle"
...