Какую задачу решает AOP?
- Зачем нужно аспектно-ориентированное программирование?
AOP выносит сквозную функциональность — транзакции, логирование, безопасность, метрики, кэширование — из бизнес-методов в аспекты. Метод содержит только бизнес-логику.
- В Spring реализовано прокси вокруг бинов
- @Transactional, @Cacheable, @Async — примеры аспектов
- Свой аспект — @Aspect с advice и pointcut
А ещё Ограничение — внутренние вызовы мимо прокси
Подробно
Сквозной называют функциональность, которая нужна во множестве мест и не относится к предметной области, — если писать её руками, она размажется по всему коду и будет дублироваться. Аспект описывает, что делать и где применять, а фреймворк подставляет это при вызове. Именно на этом механизме построены @Transactional, @Cacheable и @Async. Ключевая техническая деталь для понимания: Spring оборачивает бин в прокси, поэтому перехватываются только вызовы, приходящие снаружи.
Что хотят услышать
- Сквозная функциональность и пример.
Частые ошибки
- Ожидать перехвата при вызове метода изнутри того же класса.
- Складывать в аспекты бизнес-логику.
Проверьте себя
Один верный вариант. Подумайте, потом откройте ответ.
Показать варианты и ответ
- ✗Ускоряет выполнение методов за счёт кэширования и предварительной компиляции байткода
- ✓Выносит сквозную логику — логирование, транзакции, кэш — в отдельные аспекты
- ✗Позволяет вызывать методы удалённых сервисов как локальные
- ✗Заменяет наследование при построении иерархий классов
Что спросят дальше
- Почему @Transactional не работает при вызове изнутри класса?
- Какие виды advice существуют?
Разбор темы
- AOP: прокси и аспекты
Сквозная функциональность, понятия aspect/advice/pointcut/join point, JDK против CGLIB прокси, self-invocation и что на AOP построено.
Связанные вопросы
Разбор собеседования с sotto
После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.