1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/sunflower-git-pf4j

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
README.md 7.9 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 28.11.2024 13:52 53bea91

Плагин-фреймворк для Java (PF4J)

Plugin Framework for Java (PF4J)

Присоединитесь к чату на https://gitter.im/decebals/pf4j

Статус сборки Travis CI

Состояние покрытия

Maven Central

Плагин — это способ, с помощью которого третья сторона может расширить функциональность приложения. Плагин реализует точки расширения, объявленные приложением или другими плагинами. Также плагин может определять точки расширения.

Примечание: начиная с версии 0.9 вы можете определить расширение непосредственно в jar-файле приложения (вы не обязаны помещать расширение в плагин — вы можете рассматривать это расширение как стандартное/системное). См. WhazzupGreeting для реального примера.

Особенности и преимущества

С PF4J вы можете легко преобразовать монолитное приложение Java в модульное.

PF4J — это открытый исходный код (лицензия Apache), лёгкий (около 50 КБ) фреймворк плагинов для Java с минимальными зависимостями (только slf4j-api) и очень расширяемый (см. PluginDescriptorFinder и ExtensionFinder).

На практике PF4J представляет собой микрофреймворк, цель которого — сохранить ядро простым, но расширяемым. Я пытаюсь создать небольшую экосистему (расширения) на основе этого ядра с помощью сообщества.

В настоящее время доступны следующие расширения:

— pf4j-update (механизм обновления для PF4J);

— pf4j-spring (интеграция PF4J и Spring Framework);

— pf4j-wicket (интеграция PF4J и Wicket);

— pf4j-web (использование PF4J в веб-приложениях).

Никакого XML, только Java.

Вы можете пометить любой интерфейс или абстрактный класс как точку расширения (с помощью интерфейса-маркера ExtensionPoint) и указать, что класс является расширением с аннотацией @Extension.

Также PF4J можно использовать в веб-приложениях. Для своих веб-приложений, когда мне нужна модульность, я использую pf4j-wicket.

Компоненты

Plugin — базовый класс для всех типов плагинов. Каждый плагин загружается в отдельный загрузчик классов, чтобы избежать конфликтов.

PluginManager используется для всех аспектов управления плагинами (загрузка, запуск, остановка). Вы можете использовать встроенную реализацию как DefaultPluginManager, JarPluginManager или реализовать собственный менеджер плагинов, начиная с AbstractPluginManager (реализовать только фабричные методы).

PluginLoader загружает всю информацию (классы), необходимую плагину.

ExtensionPoint — точка в приложении, где можно вызвать пользовательский код. Это маркер интерфейса Java. Любой интерфейс Java или абстрактный класс можно пометить как точку расширения (реализует интерфейс ExtensionPoint).

Extension — реализация точки расширения. Это аннотация Java на классе.

Как использовать

Добавить PF4J в своё приложение очень просто.

Определите точку расширения в своём приложении с помощью маркера интерфейса ExtensionPoint:

public interface Greeting extends ExtensionPoint {

    String getGreeting();

}

Создайте плагин, который вносит вклад в расширение:

public class WelcomePlugin extends Plugin {

    public WelcomePlugin(PluginWrapper wrapper) {
        super(wrapper);
    }

    @Extension
    public static class WelcomeGreeting implements Greeting {

        public String getGreeting() {
            return "Welcome";
        }

    }

}

В приведённом выше коде я создал плагин, который поставляется с одним расширением для точки расширения Greeting. Плагин как JAR-файл (простое решение). В этом случае добавьте метаданные плагина в файл MANIFEST.MF JAR:

Manifest-Version: 1.0
Archiver-Version: Plexus Archiver
Created-By: Apache Maven
Built-By: decebal
Build-Jdk: 1.6.0_17
Plugin-Class: org.pf4j.demo.welcome.WelcomePlugin
Plugin-Dependencies: x, y, z
Plugin-Id: welcome-plugin
Plugin-Provider: Decebal Suiu
Plugin-Version: 0.0.1

В приведённом выше манифесте я описал плагин с идентификатором welcome-plugin, классом org.pf4j.demo.welcome.WelcomePlugin, версией 0.0.1 и зависимостями от плагинов x, y, z.

Теперь вы можете работать с плагинами и расширениями в своём коде:

public static void main(String[] args) {
    ...

    // создать менеджер плагинов
    PluginManager pluginManager = new DefaultPluginManager();

    // запустить и загрузить все плагины приложения
    pluginManager.loadPlugins();
    pluginManager.startPlugins();

    // получить все расширения для точки расширения «Greeting»
    List<Greeting> greetings = pluginManager.getExtensions(Greeting.class);
    for (Greeting greeting : greetings) {
        System.out.println(">>> " + greeting.getGreeting());
    }

    // остановить и выгрузить все плагины
    pluginManager.stopPlugins();
    pluginManager.unloadPlugins();

    ...
}

Вывод:

>>> Welcome

PF4J очень настраиваемый и имеет множество полезных функций. Пожалуйста, ознакомьтесь с документацией, чтобы самостоятельно оценить возможности этой библиотеки.

Документация

Документация доступна на pf4j.org.

Демо

Демонстрационные приложения доступны в папке demo.

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/sunflower-git-pf4j.git
git@api.gitlife.ru:oschina-mirror/sunflower-git-pf4j.git
oschina-mirror
sunflower-git-pf4j
sunflower-git-pf4j
master