2012-05-31 2 views
7

Недавно я пришел через java-загрузчик пользовательских классов api. Я нашел здесь одно использование, kamranzafar's blog Я немного новичок в концепции загрузчика классов. Может ли кто-нибудь объяснить подробно, каковы различные сценарии, в которых мы можем нуждаться, или мы должны использовать его?Что такое пользовательский загрузчик классов

+0

Хорошая статья для написания пользовательского загрузчика классов. http://www.journaldev.com/349/java-classloader –

ответ

22

Пользовательские загрузчики классов полезны для больших архитектур, состоящих из нескольких модулей/приложений. Вот преимущество пользовательского загрузчика классов:

  • Обеспечивает Модульная архитектура Позволяет определить несколько загрузчик классов, позволяющих модульную архитектуру.
  • Устранение конфликтов Четко определяет область действия класса внутри загрузчика классов.
  • Поддержка версий Поддерживает различные версии класса в пределах одной виртуальной машины для разных модулей.
  • Лучшее управление памятью Неиспользованные модули могут быть удалены, что выгружает классы, используемые этим модулем, который очищает память.
  • Загрузить классы из любого места Занятия можно загружать из любого места, для ex, базы данных, сетей или даже определять его на лету.
  • Динамически добавлять динамические ресурсы или классы Все перечисленные функции позволяют динамически добавлять классы или ресурсы.
  • Runtime Перезагрузка модифицированных классов Позволяет перезагрузить среду выполнения классов или классов, создав загрузчик дочерних классов для реального загрузчика классов, который содержит измененные классы.
+3

Интересный (классный?) пример загрузки классов из любого места можно увидеть здесь: http://99-bottles-of-beer.net/language- java-1162.html – Crollster

+0

@Ramesh PVK благодарит за описание. но это действительно замечательно, если вы можете предоставить некоторые примеры кодов, чтобы понять, что вы описываете. надеюсь, что вы сделаете это для нас, интересующихся java. –

11

Основное использование в серверах приложений так, что они могут запускать два приложения и не конфликтуют с классами. то есть, если приложение 1 имеет класс с тем же именем, что и приложение 2, с помощью приложения загрузчика пользовательского класса 1 загрузит его класс, а приложение 2 загрузит его класс.

Также, если класс загружен пользовательским загрузчиком классов, можно выгрузить этот класс из JVM. Снова полезно в серверах приложений.

Другое применение было бы для аппаратуры - одним из способов делать аспектно-ориентированное программирование или при использовании некоторых API-интерфейсов persistence. С помощью специального загрузчика классов вы можете добавлять поведение к загруженным классам, прежде чем они будут переданы запущенному приложению.

2

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

Классы также связаны с загрузчиком ClassLoader. Поэтому

Пользовательские загрузчики классов открыть множество интересных возможностей:

  • Загрузка нескольких версий одного и того же класса с различными загрузчиков классов (например, для устранения возможных версионирование conficts, например)
  • Загрузка и разгрузка классов динамически во время выполнения
  • Создание новых классов (например,JVM Языки, как Clojure используют различные приемы, чтобы генерировать загрузки классов новых скомпилированные классы для представления функций Clojure во время выполнения)
  • Загрузка классов из нестандартных источников

Normal Java приложений, как правило, не нужно беспокоиться о загрузчиков классов. Но если вы пишете фреймворк или платформу, на которой должен размещаться другой код, то они становятся гораздо более важными/релевантными.

Смежные вопросы