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

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

Ответ 1

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

Ответ 2

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

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

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

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

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

Ответ 3

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