Ответ 1
Объекты из разных загрузчиков классов могут взаимодействовать друг с другом через интерфейсы и классы, загруженные обычным загрузчиком классов.
Мне нужны разные загрузчики классов, чтобы иметь возможность разгружать классы. Но мне нужно обмениваться объектами между ними (на самом деле я получаю ClassCastException). Итак, каковы решения, чтобы справиться с этим?. Благодаря
Объекты из разных загрузчиков классов могут взаимодействовать друг с другом через интерфейсы и классы, загруженные обычным загрузчиком классов.
Одной из основных целей использования отдельных загрузчиков классов является предотвращение именно того, что вы пытаетесь сделать. Безопасность и конфликты имен являются вескими причинами для сохранения этой изоляции. Вот несколько способов, которыми вы можете обойти эту изоляцию.
Использование загрузчика Common Class
Обмен библиотеками через кластер
Упаковка клиентского JAR для одного приложения в другом Применение
Подробнее см. ссылку .
Также отметим, что если вы используете интерфейсы, вы можете использовать java.lang.reflect.Proxy для создания экземпляра интерфейса, локального для вашего загрузчика классов, который под капотом делает вызовы с отражением "реальным" ( чужой) объект от другого загрузчика классов. Это уродливо, и если параметры или типы возврата не являются примитивными, вы просто передадите ClassCastException дальше по строке. Хотя вы можете пристроить что-то для выполнения этой работы, в общем, лучше иметь либо родительский загрузчик классов с некоторыми общими типами, которые вы хотите использовать в загрузчиках классов, или использовать более... сериализованный формат для связи ( медленнее) или использовать только интерфейсы, которые имеют дело с примитивами.