Когда создавать собственные загрузчики классов?

Зачем вам когда-либо нужно создавать собственные загрузчики классов? Пример из реального мира был бы великолепен!

4 ответа

Решение

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

Другие пользовательские загрузчики классов используются для поддержки динамических внедрений кода (Из Java 5.0 Instrumentation предпочтительнее)

Типичные случаи:

  • Инструменты / Загрузка классов во время выполнения.

  • Загрузка зашифрованных классов.

  • Удаленная загрузка классов.

Это не то, что вам, вероятно, когда-либо придется писать самостоятельно, но вы можете использовать его как часть некоторых сложных сред - например, внедрение зависимостей часто реализуется с помощью ClassLoaders. Другое распространенное использование пользовательских загрузчиков классов - это модульное тестирование: пользовательский загрузчик классов может использоваться для замены классов, загружаемых тестируемым модулем, на "фиктивные" версии, которые реагируют контролируемым образом (например, для имитации ошибок, которые в противном случае были бы сложно создать).

Честно говоря, действительно сложно представить себе экосистему Java без нестандартных загрузчиков классов. Многие слабосвязанные архитектуры основаны на загрузчиках классов. Я бы предложил провести несколько часов с JSPF (Java Simple Plugin Framework), потому что только некоторый практический опыт будет действительно ценным для вас. JSPF довольно прост и позволяет не только понять потенциальные случаи, когда требуются пользовательские загрузчики классов, но и почувствовать всю мощь такого решения.

Попробуйте следовать простому плану:

  • Определить интерфейс (контракт)
  • Обеспечить реализацию как независимый модуль /jar
  • Используйте JSPF и ранее определенный контракт для обнаружения доступных реализаций.
  • Сделайте некоторые полезные вещи с обнаруженной реализацией
  • Поймите, у вас слабосвязанная система
  • Узнайте, как на самом деле используются загрузчики классов в этом примере

Пожалуйста, просмотрите также следующие ссылки:

Другие вопросы по тегам