我添加了一个注释来跟踪方法执行所花费的时间,但是即使它对不带参数的方法执行,也不会对带参数的方法执行。
@Around("@annotation(com.x.y.a.TrackTime)")
public Object trackTime(ProceedingJoinPoint joinPoint) throws Throwable {
return getProceedAndTrackTime(joinPoint);
}
我也尝试使用执行:
@Around("execution(public void com.x.y.m.myMethod(..))")
也
@Around("execution(public void com.x.y.m.myMethod(com.x.y.e.SomeType))")
还有
@Around("execution(public void com.x.y.m.myMethod(..)) && args(myArgument,..)")
以上都不适用于带参数的方法,为什么呢?应该怎么做?
答案 0 :(得分:1)
要跟踪带有或不带有参数的方法的执行时间,可以在annotation
和实现下面进行尝试:
带注释的界面:
@Component
@Retention(RUNTIME)
@Target(ElementType.METHOD)
public @interface TimeTracker {}
上述接口的实现:
@Component
@Aspect
public class TimeTrackerAspect {
@Around("@annotation(TimeTracker)")
public Object around(ProceedingJoinPoint pJoinPoint) throws Throwable {
Long startTime = System.currentTimeMillis();
Object obj = pJoinPoint.proceed();
System.out.println("Total milli seconds in execution of method: " + pJoinPoint.getSignature().getName() + " is :" + (System.currentTimeMillis()-startTime));
return obj;
}
}
然后,无论您在哪里使用注释@TimeTracker
的总时间,都可以从sysout更改为Logging
有关详细信息,我还将示例代码推送到github中,请查看以下内容:https://github.com/krishnaiitd/learningJava/tree/master/springBoot/gs-spring-boot/src/main/java/com/example/demo