Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Spring: aop, around, advice

Как написать аспект для измерения времени выполнения метода?

Вопрос проверяет практическое понимание Spring AOP и умение писать аспекты.

Короткий ответ

Для измерения времени используется аспект с @Around.
Время фиксируется до и после proceed().
Аспект может применяться по аннотации или по пакету.
Код изолирован от бизнес-логики.
Подход легко расширяется.

Длинный ответ

Рассмотрим типовую реализацию такого аспекта.

Шаг 1. Аннотация

Создаём маркерную аннотацию:

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface LogExecutionTime {}

Шаг 2. Аспект

@Aspect
@Component
public class TimingAspect {

    @Around("@annotation(LogExecutionTime)")
    public Object measure(ProceedingJoinPoint pjp) throws Throwable {
        long start = System.nanoTime();
        try {
            return pjp.proceed();
        } finally {
            long duration = System.nanoTime() - start;
            // логирование duration
        }
    }
}

Шаг 3. Использование

@LogExecutionTime
public void process() {
    // бизнес-логика
}

Важные моменты

  • аспект работает только для Spring-бинов

  • самовызовы не перехватываются

  • важно учитывать накладные расходы

Вывод

Аспекты позволяют прозрачно измерять время выполнения методов без загрязнения бизнес-кода.

Уровень

  • Рейтинг:

    4

  • Сложность:

    7

Навыки

  • Spring

    Spring

Ключевые слова

#aop

#around

#advice

Подпишись на Java Developer в телеграм