Что важно знать
- Транзакции, кэш, безопасность, асинхронность — через прокси.
- Самовызов внутри класса идёт мимо прокси — аннотация не работает.
- Прокси не работают с private и final методами.
Аспекты, JDK и CGLIB прокси и почему не работает вызов @Transactional изнутри класса.
Практика. Воспроизвести самовызов метода с @Transactional, показать, что транзакции нет, и исправить.
AOP выносит сквозную функциональность — транзакции, логирование, безопасность, метрики, кэширование — из бизнес-методов в аспекты. Метод содержит только бизнес-логику.
AOP выносит сквозную функциональность (транзакции, безопасность, логирование, метрики) из бизнес-кода в аспекты. Advice — что и когда выполнить; pointcut — где; join point …
@Before — до метода, @AfterReturning — после успешного возврата, @AfterThrowing — после исключения, @After — в любом случае (как finally), @Around — вокруг, с вызовом proceed().
Spring AOP на прокси перехватывает только внешние вызовы публичных методов бинов: не работает self-invocation, private-методы, final-методы и классы при CGLIB, объекты не из…
JDK dynamic proxy — реализует интерфейсы бина, перехватывает только методы интерфейсов. CGLIB — подкласс бина, работает без интерфейсов. Spring Boot по умолчанию включает CGLIB…
Сквозная функциональность, понятия aspect/advice/pointcut/join point, JDK против CGLIB прокси, self-invocation и что на AOP построено.
На живом собеседовании sotto слышит вопрос интервьюера и показывает короткий ответ и план. Оставьте контакт — пришлём доступ и промокод.