Как разделить объекты между различными загрузчиками классов? - PullRequest
15 голосов
/ 01 октября 2011

Мне нужны разные загрузчики классов для возможности выгрузки классов. Но мне нужно делиться объектами между ними (на самом деле я получаю ClassCastException). Так, каковы решения, чтобы справиться с этим? Спасибо

Ответы [ 3 ]

10 голосов
/ 01 октября 2011

Объекты из разных загрузчиков классов могут взаимодействовать друг с другом через интерфейсы и классы, загруженные общим загрузчиком классов.

2 голосов
/ 01 октября 2011

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

  1. Использование загрузчика общего класса

  2. Совместное использование библиотек в кластере

  3. Упаковка клиентского JAR-файла для одного приложения в другом Применение

Обратитесь к этой ссылке для получения более подробной информации.

1 голос
/ 13 октября 2017

Также отметим, что если вы используете интерфейсы, вы можете использовать java.lang.reflect.Proxy для создания экземпляра интерфейса, локального для вашего загрузчика классов, который под капотом делает вызовы с отражением "реального" (чужой) объект из другого загрузчика классов.Это ужасно, и если параметры или возвращаемые типы не являются примитивными, вы просто будете передавать ClassCastException дальше по линии.В то время как вы можете настроить что-либо для выполнения этой работы, в целом, лучше иметь родительский загрузчик классов с некоторыми общими типами, которые вы хотите использовать в загрузчиках классов, или использовать больше ... Сериализованный формат для связи (медленнее) или общий доступ только к интерфейсам, имеющим дело с примитивами.

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