Свой аспект: когда и как
Вопрос
Когда вы бы написали свой аспект? Приведите пример и расскажите о подводных камнях.
Попробуйте сами
Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.
Показать ответ и разбор
Коротко
Что должно прозвучать в ответе
Сквозная логика: аудит, метрики, логирование, проверка прав
Pointcut по своей аннотации, @Around с proceed
Аспект должен быть бином (@Component) и включён AOP
Ограничения прокси: this-вызовы, private, final
Порядок аспектов через @Order
Не прятать бизнес-логику в аспектах
Что могут спросить следом
- Чем аспект лучше декоратора или фильтра?
- Как протестировать аспект?
Разбор
Аспект беру для действительно сквозной логики: аудит действий, метрики времени выполнения, единообразная проверка прав или идемпотентность по ключу. Например, аннотация @Audited и аспект с @Around("@annotation(audited)"), который пишет в журнал, кто и что вызвал, обязательно возвращая pjp.proceed(). Аспект объявляю бином, в Boot AOP-стартер включает автопроксирование. Помню ограничения: внутренние вызовы через this и private-методы аспект не увидит. Если на методе несколько аспектов, явно задаю @Order, иначе порядок с транзакцией непредсказуем. Бизнес-логику в аспекты не прячу: код становится неочевидным. Тестирую аспект интеграционно, со Spring-контекстом, или через AspectJProxyFactory в юнит-тесте.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Предыдущий вопрос
Вызов @Transactional-метода из того же класса
Следующий вопрос
Как работает @Transactional через прокси