Вопрос с собеседования · Spring

Какую задачу решает AOP?

JuniorAOP и проксиSpring
Ещё спрашивают так:
  • Зачем нужно аспектно-ориентированное программирование?
Коротко

AOP выносит сквозную функциональность — транзакции, логирование, безопасность, метрики, кэширование — из бизнес-методов в аспекты. Метод содержит только бизнес-логику.

  • В Spring реализовано прокси вокруг бинов
  • @Transactional, @Cacheable, @Async — примеры аспектов
  • Свой аспект — @Aspect с advice и pointcut

А ещё Ограничение — внутренние вызовы мимо прокси

Подробно

Сквозной называют функциональность, которая нужна во множестве мест и не относится к предметной области, — если писать её руками, она размажется по всему коду и будет дублироваться. Аспект описывает, что делать и где применять, а фреймворк подставляет это при вызове. Именно на этом механизме построены @Transactional, @Cacheable и @Async. Ключевая техническая деталь для понимания: Spring оборачивает бин в прокси, поэтому перехватываются только вызовы, приходящие снаружи.

Что хотят услышать

  • Сквозная функциональность и пример.

Частые ошибки

  • Ожидать перехвата при вызове метода изнутри того же класса.
  • Складывать в аспекты бизнес-логику.

Проверьте себя

Один верный вариант. Подумайте, потом откройте ответ.

Показать варианты и ответ
  • ✗Ускоряет выполнение методов за счёт кэширования и предварительной компиляции байткода
  • ✓Выносит сквозную логику — логирование, транзакции, кэш — в отдельные аспекты
  • ✗Позволяет вызывать методы удалённых сервисов как локальные
  • ✗Заменяет наследование при построении иерархий классов

Что спросят дальше

  • Почему @Transactional не работает при вызове изнутри класса?
  • Какие виды advice существуют?

Разбор темы

Связанные вопросы

Партнёр платформы

Разбор собеседования с sotto

После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.

Разбор собеседования