Php: в чем разница между $ var и & amp; $ var?

Как отмечали другие люди, ресурсы получают через ClassLoader. Однако эти два текущих ответа не смогли подчеркнуть следующие моменты:

  • ClassLoaders предназначены для абстрагирования процесса получения классов и других ресурсов. Ресурс не обязательно должен быть файлом в файловой системе; это может быть удаленный URL-адрес или что-то еще, что вы или кто-то еще может реализовать, расширяя java.lang.ClassLoader.
  • ClassLoaders существуют в цепочке делегирования дочерних / родительских. Обычное поведение для ClassLoader состоит в том, чтобы сначала попытаться получить ресурс от родителя и только затем выполнить поиск его собственных ресурсов, но некоторые загрузчики классов выполняют противоположный порядок (например, в контейнерах сервлетов). В любом случае вам нужно будет определить, какое место загрузчика для получения материала, в которое вы хотите поместить материал, и даже тогда другой вышегрузщик класса выше или ниже может «украсть» запросы ресурсов вашего клиента.
  • Как отмечает Lionel Port, даже у одного ClassLoader может быть несколько местоположений, из которых он загружает вещи.
  • ClassLoaders используются, чтобы загружать классы. Если ваша программа может записывать файлы в место, где загружаются классы, это может легко стать угрозой безопасности, поскольку пользователь может ввести код в ваше запущенное приложение.

Короткий вариант: не делайте этого. Напишите более абстрактный интерфейс для концепции «хранилища ресурсоподобных вещей, из которых я могу получить материал», и subinterface для «хранилища ресурсоподобных материалов, из которых я могу получить материал, а также добавить материал». Внедрите последнее так, чтобы оба использовали ClassLoader.getContextClassLoader().getResource() (для поиска пути к классам), и если это не удается, используется другой механизм для получения информации, которую программа могла добавить из некоторого местоположения.

16
задан Olivier Pons 29 December 2010 в 15:16
поделиться