Прокси в Spring
Объект между вызывающим кодом и реальным bean
Прокси — объект, который выглядит для вызывающего кода как нужный сервис, но передаёт вызов реальному объекту через дополнительный слой. Именно в этом слое Spring может выполнить advice, открыть транзакцию, проверить безопасность или добавить другое инфраструктурное поведение.
PaymentService service = context.getBean(PaymentService.class);
service.pay();
В коде переменная имеет привычный тип PaymentService,
но объект, полученный из контейнера, может оказаться Spring-прокси.
Вызов pay() сначала проходит через него,
и только затем делегируется целевому bean.
Какие прокси использует Spring
Если bean работает через интерфейс, Spring может создать JDK dynamic proxy, который реализует этот интерфейс. Для проксирования самого класса Spring может использовать class-based proxy — подкласс исходного класса. Для большинства прикладного кода конкретный тип прокси не должен быть частью бизнес-логики, но знать различие полезно при диагностике поведения.
Почему вызов должен пройти через прокси
Дополнительная логика срабатывает только там, где вызов действительно проходит через объект-посредник. Если код каким-то способом обходит прокси и обращается прямо к целевому объекту, перехватить такой вызов на уровне Spring AOP уже нечему.
final-метод,
а private-метод в принципе не является обычной точкой внешнего вызова через прокси.
Теперь базовая картина Spring Core собрана: контейнер создаёт beans и связывает зависимости, а инфраструктурные механизмы могут оборачивать управляемые объекты дополнительным поведением. На этой основе Spring Boot упростит запуск и конфигурацию полноценного приложения.