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.

Заказать гайд Пройти тест
новые гайды и свежие вопросы с собесов — первыми в Telegram Смотреть гайды Подписаться