【发布时间】:2015-07-13 16:43:43
【问题描述】:
我有一个关于如何使用注释、aspectj 和 spring 对方法进行时间性能审计的问题
基本上我有:
public class MyClass{
@TimeAudit
public myMethod(){
//do something
}
}
我只想在某处记录(或在控制台中打印)执行该方法所花费的时间。我的问题是一个方面将如何拦截该注释,然后计算该方法花费的时间。
我该怎么做? 澄清一点我的问题: 我有注释:
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD, ElementType.TYPE})
public @interface TimeAudit {
}
我有我的一面:
@Aspect
@Component
public class PerformanceTimeExecutionAudit {
@Around("execution(* *(..)) && @annotation(timeAudit)")
public Object doLogTime(final ProceedingJoinPoint pjp, TimeAudit timeAudit) throws Throwable {
System.out.println("Start time..."+System.currentTimeMillis());
Object output = pjp.proceed();
System.out.println("End time..."+System.currentTimeMillis());
return output;
}
}
在其他课程上:
@Repository
public class MyClass{
@Override
@TimeAudit
public void myMethod(){
//do something
}
}
但是如果我设置了@TimeAudit,则不会为该方法触发方面。 我做错了什么?
【问题讨论】:
-
谢谢你,它似乎可以进行性能测量。但我想看看我是怎么做到的。
-
您可以查看Perf4J source code。
@Profiled注释在aop包中。这会触发同样在同一个包中的ProfiledTimingAspect。从这里您可以按照代码了解如何处理实际测量和记录。 AspectJ 配置在我上面链接到的页面上。 -
你是否在你的 Spring 配置中启用了 AOP?应用程序是如何配置的?
标签: spring annotations aop aspectj