Подтвердить что ты не робот

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

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

4b9b3361

Ответ 1

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

Ответ 2

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

  • Использование загрузчика Common Class

  • Обмен библиотеками через кластер

  • Упаковка клиентского JAR для одного приложения в другом Применение

Подробнее см. ссылку .

Ответ 3

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