切入点不适用于带参数的方法

时间:2019-03-27 14:39:18

标签: aop aspectj spring-aop

我添加了一个注释来跟踪方法执行所花费的时间,但是即使它对不带参数的方法执行,也不会对带参数的方法执行。

@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,..)")

以上都不适用于带参数的方法,为什么呢?应该怎么做?

1 个答案:

答案 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