Пользовательский загрузчик классов в Constructor.newInstance - PullRequest
0 голосов
/ 30 октября 2009

Я использую Rhino через среду сценариев bean для создания и настройки объектов в моем Java-процессе. Некоторые из классов, используемых в сценариях, должны загружаться динамически, поскольку они не всегда находятся в стандартном пути к классам.

Чтобы загрузить эти классы, я инициализирую фабрику контекста инфраструктуры сценариев с помощью специального загрузчика классов, который загружает эти классы из вспомогательного каталога. Это хорошо работает.

Проблема в том, что некоторые из этих классов в своих конструкторах используют другие классы, которые также должны быть загружены из этого вспомогательного каталога. Глядя на источник, я вижу, что движок javascript просто вызывает Constructor.newInstance.

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

Ответы [ 2 ]

1 голос
/ 30 октября 2009

Попробуйте установить родительский загрузчик классов вашего загрузчика классов в загрузчик классов приложения.

ClassLoader myLoader = new ClassLoader(getClass().getClassLoader()) { 
... your code loading from custom directory ...
}

Классы, загруженные из вашего загрузчика, будут использовать ваш загрузчик для поиска других классов, поэтому ваш загрузчик должен предоставить их (делегируя родителю)

0 голосов
/ 30 октября 2009

Constructor.newInstance работает с Constructor экземпляром, который принадлежит конкретному Class экземпляру, который был загружен конкретным ClassLoader. Классы связываются через собственный загрузчик классов.

Single-arg Class.forName использует загрузчик классов непосредственного абонента (это очень непослушный API).

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