AOP不是由注释调用的

时间:2018-05-05 17:25:46

标签: java aop aspectj pointcut java-annotations

我正在尝试为每个使用@Timed注释的方法调用AOP方法。

我的AOP 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");
  }

在运行时,我从servlet获取日志,但不是MyTracer类。

1 个答案:

答案 0 :(得分:0)

好的,我明白了。 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"