YMP在线手册
/ 插件的实现及使用
插件的实现及使用
通过在一个实现了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.
注:同一个插件可以实现多个业务接口,若多个插件实现同一个业务接口,根据插件加载顺序,最后加载的插件实例对象将替换前者;