Внутренняя архитектура ядра разработки на основе плагинов в Java
Я нашел ниже стили для разработки плагина
1:java.util.ServiceLoader
Рабочий стиль: поиск в META-INF/services и получение внедренного сервиса
Предоставить абстрактный класс другому разработчику
2:java.net.URLClassLoader
Рабочий стиль: загрузить необходимый класс из файла JAR и получить экземпляр.
Предоставить интерфейс другому разработчику
3: Загрузить из файла свойств
InputStream in =this.getClass().getClassLoader()
.getResourceAsStream("packageName/config.properties");
Рабочий стиль 3: загрузка имени класса из файла свойств, который реализует предоставленный интерфейс
Предоставить интерфейс другому разработчику
Пример кода для 3
public interface PluginInterface {
void performYourOperation();
};
public class PluginImpl implements PluginInterface {
void performYourOperation() {
//perform all operation what plugin is inteneded to do
}
Main Loader:
InputStream in =this.getClass().getClassLoader()
.getResourceAsStream("packageName/config.properties");
configProp.load(in );
String factoryClass = (String) configProp
.get("plugin.factory.class");
Class<?> factory = Class.forName(factoryClass);
PluginInterface factory=(PluginInterface) factory.newInstance();
factoryq.performYourOperation();
};
Я нашел 3 способа для собственного стиля реализации плагина.
Есть ли другие способы помимо вышеупомянутого.
Является ли Maven и Jenkins и другие его основной уровень в том же стиле, или у них есть более продвинутый путь? У любого есть хорошая идея для этого.
Пожалуйста, не предлагайте использовать этот фреймворк, и я хочу изучить и понять основной внутренний стиль работы. Спасибо