mplug-project
mplug — это основанный на аннотациях и подходящий для SpringBoot плагин-фреймворк. Его цель — решить проблему, когда логика одного проекта может по-разному обрабатываться в разных средах. Этот фреймворк поддерживает два способа определения точек расширения:
Плагин может содержать несколько jar-файлов, но только один из них может быть основным. Основной jar-файл должен содержать хотя бы один класс плагина и файл plugin.info в каталоге META-INF. Если класс является классом плагина, он должен содержать как минимум один метод с аннотацией @Plugin. Формат основного jar-файла должен быть name-version.jar. Класс плагина может содержать несколько аннотаций @Plugin, но эти методы должны предоставлять связанные функции. Один метод с аннотацией @Plugin соответствует одной точке расширения с аннотацией @Extension. Класс плагина должен иметь конструктор без параметров или быть управляемым Spring.
Точка расширения — это любой метод в классе, исходная реализация которого становится реализацией по умолчанию для этой точки расширения. Когда фреймворк обнаруживает плагин для этой точки расширения, он автоматически заменяет реализацию по умолчанию реализацией плагина.
Проект mplug содержит три подмодуля:
Структура каталогов плагинов:
plugins — каталог плагинов, заданный системной переменной plugin.dir.
config — каталог, содержащий файлы конфигурации для использования фреймворком.
extensions — файлы, содержащие записи всех настроенных точек расширения. Одна строка — одна точка расширения.
plugins — файлы, записывающие все установленные плагины. Одна строка — один плагин.
jars — каталог для размещения всех jar-пакетов плагинов.
Основной jar-пакет плагина — основной jar-пакет каждого плагина.
lib — если плагину требуется поддержка сторонних jar-пакетов, поместите все сторонние jar-файлы в этот каталог. Классы в этом каталоге, даже если они содержат аннотацию @Plugin, не будут распознаны.
## This file describe a plugin, 4 properties could be used: artifactId, version, name, description.
artifactId:plugin-example
version:1.0.0
name:Тестовый плагин
description:Это описание плагина
После установки:
@Aspect
@Component
public class SomeConfigurableExtensionHandler extends ConfigurableExtensionHandler {
public SomeConfigurableExtensionHandler() throws IOException {
super();
}
@Around("within(net.beyondts.example.mplug.extension..*)")
public Object handle(ProceedingJoinPoint joinPoint) throws Throwable {
return super.handle(joinPoint);
}
* **Примечание:** аннотация @Component используется только для того, чтобы Spring автоматически запускал Handler. Все методы подкласса должны просто вызывать соответствующий метод суперкласса напрямую.
5. В проекте плагина можно использовать аннотацию @Component (или любую другую, содержащую аннотацию @Component), чтобы передать класс в управление Spring, и одновременно использовать @Autowired для внедрения объектов из других проектов плагинов, управляемых Spring.
6. Если вы хотите использовать методы Bean, управляемые Spring в основном проекте, в проекте плагина, используйте класс инструментов SpringBeansInvocation для вызова.
7. methodB вызывается methodA, оба метода находятся в ClassX. Если methodB является точкой расширения, то плагин не сможет работать нормально при обычном использовании this.methodB, потому что объект, на который указывает this, не является прокси-объектом, а самим ClassX. Чтобы решить эту проблему, можно позволить ClassX наследовать Self и использовать метод invokeSelf класса Self для вызова methodB в methodA или использовать метод BeanFactory.getBean(ClassX).methodB для вызова methodB.
8. У одной точки расширения может быть несколько реализаций плагинов. Плагины выбирают и сравнивают с помощью аннотаций Plugin choose и compare, чтобы найти подходящий метод.
* Параметр choose: атрибут или метод (должен заканчиваться на ()) некоторого метода (a:) или некоторого компонента Spring (s:), может иметь несколько уровней.
* Параметр compare: константа, результат выбора сравнивается с этим значением параметра с использованием равенства строк. Если они равны, текущий метод плагина будет использоваться.
* Если есть несколько методов плагина, которые могут соответствовать, будет использоваться только первый соответствующий метод.
9. Каждый плагин может выполнять некоторые операторы SQL во время установки и удаления, чтобы записать необходимую информацию в базу данных. Если вам нужно использовать этот эффект, добавьте install.sql (выполняется при установке) и uninstall.sql (выполняется при удалении) в META-INF плагина.
* **Примечание**: каждый файл sql может содержать несколько операторов sql, но каждый оператор sql должен заканчиваться символом «;».
#### Список задач
~~* Протестировать, есть ли пробелы между параметрами Signature~~
~~* Настроить путь базового пакета сканирования Spring~~
~~* Плагин плагина: пока не рассматривается~~
~~* По умолчанию плагин, аналогичный эффекту покрытия конфигурационного файла Spring~~
~~* Увеличить пакет аспекта конфигурации через конфигурацию: невозможно реализовать~~
* Типы точек расширения
#### Участие в разработке
---
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )