手册

目录

插件的实现及使用

收藏910

阅读11905

更新时间2022-04-11

通过在一个实现了IPlugin接口的类上声明@Plugin注解来创建插件启动类,其将被插件工厂加载和管理,一个插件包可以包括多个插件启动类,每个插件启动类可以实现自己的业务接口对外提供服务;

  • @Plugin注解参数说明:

    id:插件唯一ID,若未填写则使用初始化类名称进行MD5加密后的值做为ID;

    name:插件名称,默认为"";

    alias:插件别名,默认为"";

    author:插件作者,默认为"";

    email:联系邮箱,默认为"";

    version:插件版本,默认为"1.0.0";

    automatic:是否加载后自动启动运行,默认true;

    description:插件描述,默认为"";

  • IPlugin接口方法说明:

    init:插件初始化;

    getPluginContext:返回插件环境上下文对象;

    isInited:返回插件是否已初始化;

    isStarted:返回插件是否已启动;

    startup:启动插件;

    shutdown:停止插件;

    destroy:销毁插件对象;

插件框架提供了一个封装了IPlugin接口的AbstractPlugin抽象类,建议直接继承,示例代码:

@Plugin
public class DemoPlugin extends AbstractPlugin {
    // 根据需要重写父类方法...
}

结合业务接口的插件示例:

// 定义一个业务接口
public interface IBusiness {
    void sayHi();
}

@Plugin(id = "demo_plugin",
        name = "DemoPlugin",
        author = "有理想的鱼",
        email = "suninformaiton#163.com",
        version = "1.0")
public class DemoPlugin extends AbstractPlugin implements IBusiness {

    @Override
    public void startup() throws Exception {
        super.startup();
        //
        System.out.println("started.");
    }

    @Override
    public void shutdown() throws Exception {
        super.shutdown();
        //
        System.out.println("shutdown.");
    }

    public void sayHi() {
        System.out.println("Hi, from Plugin.");
    }
}

插件的使用

上面我们已经创建了一个DemoPlugin插件并且实现了IBusiness业务接口,下面介绍如何使用插件和调用业务接口方法:

public static void main(String[] args) throws Exception {
    YMP.get().init();
    try {
        DemoPlugin _plugin = (DemoPlugin) Plugins.get().getPluginFactory().getPlugin("demo_plugin");
        // 或者 
        // _plugin = Plugins.get().getPluginFactory().getPlugin(DemoPlugin.class);
        //
        _plugin.sayHi();
        //
        IBusiness _business = Plugins.get().getPluginFactory().getPlugin(IBusiness.class);
        _business.sayHi();
    } finally {
        YMP.get().destroy();
    }
}

执行结果:

Hi, from Plugin.
Hi, from Plugin.
shutdown.

:同一个插件可以实现多个业务接口,若多个插件实现同一个业务接口,根据插件加载顺序,最后加载的插件实例对象将替换前者;

科技资讯

更多

精选课程

更多
前端入门_HTML5
前端入门_HTML5

共29课时

61.7万人学习

CSS视频教程-玉女心经版
CSS视频教程-玉女心经版

共25课时

39.3万人学习

JavaScript极速入门_玉女心经系列
JavaScript极速入门_玉女心经系列

共43课时

70.9万人学习

独孤九贱(1)_HTML5视频教程
独孤九贱(1)_HTML5视频教程

共25课时

61.6万人学习

独孤九贱(2)_CSS视频教程
独孤九贱(2)_CSS视频教程

共22课时

23万人学习

独孤九贱(3)_JavaScript视频教程
独孤九贱(3)_JavaScript视频教程

共28课时

33.9万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时

125万人学习

关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号