pointcut не работает с методами с аргументами - PullRequest
0 голосов
/ 27 марта 2019

Я добавил аннотацию для отслеживания времени, которое требуется для выполнения метода, но хотя он выполняется для методов без параметров, он не работает для методов с параметрами.

@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 Ответ

1 голос
/ 14 апреля 2019

Чтобы отследить время выполнения метода с аргументами или без , вы можете попробовать ниже 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 к регистрации

Для получения более подробной информации, я также поместил свой пример кода в github, посмотрите на это: https://github.com/krishnaiitd/learningJava/tree/master/springBoot/gs-spring-boot/src/main/java/com/example/demo

...