Skip to content

Concept Plugin

Linyuzai edited this page Apr 6, 2022 · 32 revisions

概述

目前主要用于动态加载外部jar中的Class

当我们遇到一些插件化的需求时可能就会想到通过如动态加载类的方式来实现

java中自带有spi,不过功能有限,是以类加载作为基础概念

而本库是以插件作为基础概念,类加载作为一种插件的具体实现方式

插件可以是一个jar文件,一段java代码,一个Excel文件...

由于jar文件相对java来说可能更适合作为插件的载体

所以具体实现了jar文件作为插件

示例说明

public class ConceptPluginSample {

    /**
     * 插件提取配置
     */
    private final JarPluginConcept concept = new JarPluginConcept.Builder()
            //添加类提取器
            .addExtractor(new ClassExtractor<Class<? extends CustomPlugin>>() {

                @Override
                public void onExtract(Class<? extends CustomPlugin> plugin) {
                    //回调
                }
            })
            .build();

    /**
     * 加载一个 jar 插件
     *
     * @param filePath jar 文件路径
     */
    public void load(String filePath) {
        concept.load(filePath);
    }
}

创建一个JarPluginConcept并添加一个类提取器ClassExtractor,指定提取CustomPlugin.class或是其子类

调用load方法传入文件地址就会回调jar中匹配到的类,如果没有匹配到则不会触发回调

当然如果存在多个符合条件的Class可以直接指定集合类型

public class ConceptPluginSample {

    /**
     * 插件提取配置
     */
    private final JarPluginConcept concept = new JarPluginConcept.Builder()
            //添加类提取器
            .addExtractor(new ClassExtractor<List<Class<? extends CustomPlugin>>>() {

                @Override
                public void onExtract(List<Class<? extends CustomPlugin>> plugin) {
                    //回调
                }
            })
            .build();
}

集成

Clone this wiki locally