Вопрос проверяет понимание сквозных задач и умение применять AOP для нефункциональных требований.
Логирование времени выполнения методов обычно реализуется через AOP.
Создаётся аспект, который оборачивает вызов метода.
Время измеряется до и после выполнения.
Бизнес-код при этом не изменяется.
Подход масштабируемый и централизованный.
Измерение времени — типичная сквозная задача.
Нужно перехватывать вызовы методов:
до начала выполнения
после завершения
Это удобно делать с помощью аспектов.
Создаётся аспект с @Around.
@Aspect
@Component
public class ExecutionTimeAspect {
@Around("@annotation(LogExecutionTime)")
public Object logTime(ProceedingJoinPoint pjp) throws Throwable {
long start = System.currentTimeMillis();
try {
return pjp.proceed();
} finally {
long end = System.currentTimeMillis();
// логирование времени выполнения
}
}
}
сервисные методы
интеграции
критичные по производительности участки
Ручное логирование:
засоряет код
сложно поддерживать
легко забыть
AOP — оптимальный способ логирования времени выполнения без вмешательства в бизнес-логику.