Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Для чего нужны прокси в Java?

Автор вопроса: HFanJavaОтветов: 1

Я читаю раздел "Прокси-серверы" в известной книге Хорстманна "Ядро Java". Однако я новичок в этой концепции. Как написано в книге, прокси необходимы только тогда, когда вы еще не знаете во время компиляции, какие интерфейсы вам нужно реализовать. Однако, когда вы создаете прокси-объект, вам необходимо предоставить массив объектов класса, которые являются всего лишь интерфейсами, которые необходимо реализовать. Разве это не похоже на внутреннее противоречие? Пожалуйста, освети меня. Спасибо!

  • В чем вы видите здесь конфликт с самим собой? PM 77-1 24.02.2014
  • Если вы можете предоставить массив интерфейсов для реализации, это должно означать, что вы уже знаете, какие интерфейсы вам нужно реализовать. HFanJava 24.02.2014
  • Когда нужно поставить массив? PM 77-1 24.02.2014
  • you don't yet know at compile time, а что насчет времени выполнения, вы, вероятно, узнаете сейчас. Marc-Andre 24.02.2014
  • когда вы создаете прокси-объект, используя Proxy.newProxyInstance (...), что, боюсь, даже до компиляции. HFanJava 24.02.2014
  • фиктивный фреймворк должен стать популярным вариантом использования прокси-серверов с момента его написания. не зная классов, над которыми он должен издеваться. zapl 25.02.2014

javaproxy-classes

Ответы

Ответ 1 · LaurentG

Нет, противоречия нет.

Этот массив объектов класса, который вам нужно предоставить, может быть динамическим, то есть создаваться во время выполнения. Обычно его можно прочитать из файла конфигурации, куда вы загрузите объект Class из String. Обычно так много фреймворков (например, Spring для внедрения зависимостей) работают при создании экземпляра прокси.

Адаптированный пример из Proxy javadoc:

String className = readClassNameFromFile();
Class<?> myClass = Class.forName(className);
Foo f = (Foo) Proxy.newProxyInstance(Foo.class.getClassLoader(),
                                          new Class[] { myClass },
                                          handler);

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы