2014-12-16 2 views
0

У меня возникли трудности с пониманием значения classLoader в API ResourceBundle.getBundle(bundleName, locale, classLoader).Значение загрузчика классов при загрузке ресурсного пакета

Какой может быть практический сценарий, когда кто-то захочет предоставить пользовательский загрузчик для этого API?

ответ

2

Приложение Java может иметь несколько загрузчиков классов. Например, приложение J2EE, работающее на Tomcat или Glassfish, имеет несколько уровней загрузчиков классов - некоторые из них принадлежат самому серверу J2EE, некоторые из которых специально предназначены для вашего webapp (иначе ваш webapp сможет обращаться к классам, принадлежащим другим webapps) и даже настраивать которые вы могли бы создать самостоятельно.

Автономные приложения Java также могут иметь несколько загрузчиков классов. Например, если ваше приложение поддерживает плагины, и каждый из этих плагинов содержится в собственном JAR-файле (локальном или удаленном), то для загрузки классов плагина во время выполнения вам придется создавать свои собственные загрузчики классов для этого.

Поэтому при загрузке ResourceBundle вам необходимо выбрать соответствующий загрузчик классов, чтобы обеспечить загрузку ресурса из источника. Вот простой пример ... представьте, что ваше приложение содержит файл /version.properties, и ваш JVM также имеет аналогичный, но отличный, /version.properties (например, Java-файл IBM имеет этот файл свойств). Попытка загрузить этот файл ресурсов с использованием загрузчика по умолчанию по умолчанию для системы возвращает version.properties, который включен в JVM, и для загрузки вашей собственной версии этого файла вы должны использовать пользовательский загрузчик классов или тот, чей контекст специфичен для вашего приложения.

Существует старое, но все же очень интересное объяснение того, как работают загрузчики классов и как на практике полезны иерархии и условия загрузки. Для получения дополнительной информации, проверьте Internals of Java Class Loading.

+0

Спасибо :) приятное объяснение. – Alok

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