插件的實作及使用
透過在一個實現了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.
註
:同一個外掛程式可以實作多個業務接口,若多個外掛實作同一個業務接口,根據外掛程式載入順序,最後載入的外掛實例物件將取代前者;