Как загрузить класс, который реализует интерфейс из файла JAR во время выполнения? - PullRequest
2 голосов
/ 24 февраля 2012

Я хочу реализовать приложение, которое может использовать классы, реализованные пользователями. Каждый класс должен быть реализован интерфейс, который я определяю интерфейсы и, наконец, все классы, которые реализованы пользователем, заархивированы в JAR-файл. Пользователи копируют файлы JAR в путь к классу, а затем только дают имя файла JAR моему приложению. Мое приложение должно иметь возможность загружать файл JAR динамически. Для этого я нашел этот пост , который очень полезен, но загружает классы по именам классов. Я хочу загружать занятия на основе своих родителей.

public class A implements iA {
    @Override
    int getAValue() { ... }
}

public class B implements iB {
     @Override
     int getBValue() { ... }
}

Предположим, загруженный файл JAR имеет классы A и B. Я хочу получить экземпляр из класса B, зная имя интерфейса iB.

Что мне делать?

1 Ответ

4 голосов
/ 24 февраля 2012

Проверьте этот пост: Найдите классы Java, реализующие интерфейс

В нем рассказывается о решении того, что вы хотите.

Я знаю, что я собираюсь предложитьэто не самый легкий способ сделать это, но вы только что описали один из фундаментальных вариантов использования для архитектуры плагинов в Java и историю успеха OSGi.

Я бы предложил использовать что-то легкое, например Apache Felix, сделать банку, которую предоставляет пользователь, реализовать простой osgi.BundleActivator и зарегистрировать реализацию вашего интерфейса в качестве службы OSGi.(Это просто необычная карта хешей, не имеющая ничего общего со службами REST и т. П.).

Тогда вы можете просто получить все реализации данного интерфейса.Это довольно прямо.Вы можете ознакомиться с документацией Феликса здесь: http://felix.apache.org/site/apache-felix-framework-launching-and-embedding.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...