🔁 Паттерн Proxy
Proxy — структурный паттерн, который подставляет вместо реального объекта его заменитель. Заменитель перехватывает вызовы к оригиналу и может добавлять логику до и после или вместо реального вызова.
Разновидности и их применение
🔹 Виртуальный прокси. Откладывает создание дорогого объекта до первого реального обращения к нему. Ленивая инициализация без изменения клиентского кода.
🔹 Защитный прокси. Проверяет права доступа перед делегированием вызова. Авторизация как отдельный слой, не смешанный с бизнес-логикой.
🔹 Удалённый прокси. Скрывает сетевое взаимодействие. Клиент вызывает метод как локальный, прокси сериализует и отправляет запрос. Основа RPC и gRPC-стабов.
🔹 Кеширующий прокси. Запоминает результат вызова и возвращает его при повторных запросах с теми же параметрами.
Преимущества
1️⃣ Прозрачность для клиента
Прокси реализует тот же интерфейс, что и оригинал. Клиентский код не меняется — он не знает, с чем работает.
2️⃣ Разделение ответственности
Безопасность, кеширование, логирование — каждое в своём прокси. Бизнес-логика оригинального объекта не засорена инфраструктурными деталями.
3️⃣ Управление ресурсами
Виртуальный прокси позволяет работать с тысячами «объектов», реально создавая только те, к которым обращались. Экономия памяти и времени инициализации.
В Spring
Spring AOP — это прокси. @Transactional, @Cacheable, @PreAuthorize — всё это прокси-обёртки, которые Spring генерирует динамически через CGLIB или JDK Dynamic Proxy. Паттерн, который вы используете каждый день, иногда даже не осознавая этого.
══════ Навигация ══════
Вакансии • Задачи • Собесы
🐸 Библиотека джависта
#CoreJava
Post #7573
2.29K

- 👍 5
- 🔥 5
- ❤ 1