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