Когда использовать класс Dynamic Proxy или стандартный шаблон прокси?

Почему следует использовать «Динамический класс прокси» вместо шаблона «стандартный прокси»?

Каковы недостатки или преимущества обоих?

Кажется, что они оба имеют одинаковый конечный результат, за исключением того, что они реализованы по-разному.

Класс динамического прокси https://docs.oracle.com/javase/8/docs/technotes/guides/reflection/proxy.html

Динамический прокси-класс — это класс, который реализует список интерфейсов, указанных во время выполнения, так что вызов метода через один из интерфейсов экземпляра класса будет закодирован и отправлен другому объекту через унифицированный интерфейс. Таким образом, динамический прокси-класс можно использовать для создания прокси-объекта с безопасным типом для списка интерфейсов, не требуя предварительной генерации прокси-класса, например, с помощью инструментов времени компиляции. Вызовы методов экземпляра динамического прокси-класса направляются одному методу в обработчике вызовов экземпляра и кодируются с помощью объекта java.lang.reflect.Method, идентифицирующего вызываемый метод, и массива типа Object, содержащего аргументы.

Стандартный шаблон прокси-сервера https://en.wikipedia.org/wiki/Proxy_pattern

Прокси в самом общем виде — это класс, функционирующий как интерфейс к чему-то другому. Прокси может взаимодействовать с чем угодно: сетевым подключением, большим объектом в памяти, файлом или каким-то другим ресурсом, который дорого или невозможно скопировать. Короче говоря, прокси — это объект-оболочка или агент, который вызывается клиентом для доступа к реальному обслуживающему объекту за кулисами. В прокси-сервере могут быть предусмотрены дополнительные функции, например кэширование, когда операции с реальным объектом требуют больших ресурсов, или проверка предварительных условий перед вызовом операций с реальным объектом. Для клиента использование прокси-объекта похоже на использование реального объекта, потому что оба реализуют один и тот же интерфейс.


person G-J    schedule 08.02.2016    source источник


Ответы (1)


Вы появились, чтобы ответить на свой вопрос. Вы должны использовать тот, который легче реализовать для вашего варианта использования.

Вам нужен динамический прокси, когда у вас нет реализации для каждого метода во время компиляции.

Например, имитирующие тестовые библиотеки используют динамические прокси-серверы, чтобы можно было писать код для обработки любого метода в целом.

person Peter Lawrey    schedule 08.02.2016