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