Простота использования Java Custom загрузчиков классов? - PullRequest
1 голос
/ 18 марта 2010

Я написал некоторый клиентский загрузчик классов, который загружает некоторые классы из определенного каталога (которого нет в пути к классам), скажем:

class FileSystemClassLoader extends Classloader{
  // implementation details
}

У меня есть каталог, скажем /home/mhewedy/classes/, которого нет в пути к классам, этот каталог содержит некоторые классы, которые я использую для загрузки предыдущего загрузчика классов.

как использовать этот загрузчик классов из моего кода для загрузки классов "простота" без написания: такой код:

Thread.currentThread().setContextClassLoader(new FileSystemClassLoader());
// some code here ...
ClassLoader contextCL = Thread.currentThread().getcontextClassLoader();

1 Ответ

3 голосов
/ 18 марта 2010

Обновление для ответа на изменения OP:

Когда JVM загружает класс, он будет использовать загрузчик классов, который загрузил «текущий» класс ( для спецификации JVM ). Так что, если вы используете метод Foo.main(), который был загружен с вашим пользовательским загрузчиком классов, и вы хотите создать экземпляр Bar, также загруженный через этот загрузчик классов, вам не нужно делать ничего особенного.

Однако, если ваш текущий метод - Baz.main(), и он был загружен через системный путь к классам (указанный с помощью -cp в командной строке), то вы должны явно загрузить этот класс через загрузчик классов. Там нет никакого способа обойти это. «Контекстный загрузчик классов» предназначен для кода приложения, для загрузки ресурсов; JVM игнорирует это.

Почти во всех случаях вам лучше создать путь к классам, включающий ваши специальные классы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...