Spring middle

В чём разница: AOP: JDK proxy vs CGLIB?

Ответ

JDK dynamic proxy — если бин реализует интерфейс (через Proxy.newProxyInstance). CGLIB — наследование от класса (final-классы нельзя проксировать). Spring Boot 3 по умолчанию использует CGLIB.

Разбор: JDK dynamic proxy работает через интерфейсы (Proxy.newProxyInstance), CGLIB — через наследование от целевого класса, поэтому final-классы и final-методы CGLIB проксировать не может. Spring Boot по умолчанию использует CGLIB (proxyTargetClass=true). Ловушки: именно CGLIB не работает с final, а не JDK; JDK не создаёт наследников, а CGLIB не реализует интерфейсы; проксирование при наличии аспектов включено по умолчанию.

Хочешь так же по своей компании — с вопросами по грейдам и задачами? Закажи гайд или забери свежее в Telegram.

Заказать гайд Пройти тест
новые гайды и свежие вопросы с собесов — первыми в Telegram Смотреть гайды Подписаться