Spring middle
AOP: кейс «замерить время всех методов сервиса»?
Ответ
@Aspect + @Around("execution(* com.example.service.*.*(..))"). ProceedingJoinPoint: long start = System.nanoTime(); Object result = pjp.proceed(); long elapsed = System.nanoTime() - start; log.info("{} took {} ms", ...); return result. Только @Around с ProceedingJoinPoint умеет proceed(), и без явного вызова proceed() целевой метод не выполнится.
Разбор: Правильно: @Aspect с @Around и ProceedingJoinPoint, замер System.nanoTime() вокруг pjp.proceed(). Ловушки: @Before не возвращает управление после метода и не имеет proceed(); proceed() нельзя вызывать дважды (метод выполнится дважды); только ProceedingJoinPoint (доступный в @Around) умеет proceed(), а без явного proceed() целевой метод вообще не выполнится.
Хочешь так же по своей компании — с вопросами по грейдам и задачами? Закажи гайд или забери свежее в Telegram.