В чем смысл использования прокси (динамического прокси) в рамках spring?

Я не знаю смысла использования прокси-сервера в spring. что эффективно?

Ответ 1

Динамический прокси является особенностью JDK. Его можно использовать для реализации интерфейса с помощью обработчика вызовов.

Динамический класс прокси (просто как прокси-класс ниже) является классом который реализует список интерфейсов указанный во время выполнения, когда класс созданный, с поведением, как описано ниже. Прокси-интерфейс - такой интерфейс, который реализуется прокси-класса. Экземпляр прокси - это экземпляр класса прокси. Каждый прокси-сервер экземпляр имеет связанный вызов объект-обработчик, который реализует интерфейс InvocationHandler.

У динамического прокси есть некоторые накладные расходы. Однако для большинства случаев накладные расходы не будут значительными. Реальная проблема заключается в том, что (более) использование динамических прокси делает приложение сложнее понять и отладить. Например, динамический прокси-сервер будет отображаться с несколькими строками в стеке.

Динамические прокси-серверы часто используются для создания декораторов . Одним из примеров этого является АОП в Spring. (Я не хочу вдаваться в подробности АОП и не использовать терминологию АОП, чтобы все было просто). Если определенные проблемы выполняются в одном классе и используются во многих местах. Динамические прокси (и обработчики вызовов) - это только код клейма (предоставляется Spring) для перехвата вызовов метода. (На самом деле динамические прокси-серверы являются лишь деталью реализации этой возможности. Создание классов "на лету" - это еще одна возможность реализовать ее.)

Ответ 2

Прокси используются AOP. Короче говоря:

Обычно у вас есть.

Caller --> Real object

Но когда, например, вы хотите автоматическое управление транзакциями, spring помещает прокси вашего реального объекта

Caller --> Proxy --> Real object

где прокси запускает транзакцию.

Вот хорошая статья, объясняющая сущность прокси и их эффективность (производительность) в spring

Ответ 3

Мы можем добавить функциональность к классу Java, изменив исходный/байтовый код или используя подкласс или прокси-сервер, который добавляет дополнительные функции и делегирует вызовы базовому объекту.

Ответ 4

AOP также может использовать прокси CGLIB. Это используется для прокси-класса классов вместо интерфейсов.

Ответ 5

Другие ответы хороши, но вот как я думаю об этом очень просто.

  • Аннотация означает "добавить скрытый код для дополнительного поведения".
  • Структура (или, что то, что известно, что означает средство аннотации) добавляет байт-код, Spring во время выполнения, AspectJ во время компиляции, например.
  • Он добавляет код как прокси вместе с перехватчиком. (Обертка, декоратор, адаптер подобны и могут быть понятнее, чем "прокси".)
  • Когда программа запускается, перехватчик отправляет выполнение прокси-серверу, который выполняет свою работу, что затем может или не может отправить выполнение классу, который вы закодировали, и что он "обертывается".