У меня есть JAR-приложение, M.jar, которое поддерживает расширения для динамической записи и загрузки.Приложение требует, чтобы классы реализовывали интерфейс E и назывались NE.
Теперь я пытаюсь сделать следующее:
- Написать расширение API1 и загрузить его вM.
- Напишите другое расширение APIUser, загрузите его в M и используйте API1.
Пожалуйста, см. Диаграмму ниже для того, что я пытаюсь сделать здесь.
Я знаю, что M.jar использует пользовательский ClassLoader, потому что для него требуется, чтобы любое расширение имело только имя AE.
Я пробовал метод ServiceProvider, ServiceProviderInterfaceкак описано здесь , но это не сработало.Я полагаю, что это потому, что классы API не находятся в пути к классам М. и, следовательно, APIUser не может его найти.
Я хочу знать,
- Если возможно использовать ClassLoader APIUser для загрузки APIКласс и инициализировать его для использования в APIUser.
- Возможно ли для M заблокировать / изолировать ClassLoader API от любых других расширений?Я думаю, что это может быть основано на этом ответе .
- Какие есть еще способы загрузить класс API в APIUser1 или APIUSer2 ... и поддерживать только один экземпляр класса API?(то есть синглтон)