W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
通過(guò)在一個(gè)實(shí)現(xiàn)了IPlugin接口的類上聲明@Plugin
注解來(lái)創(chuàng)建插件啟動(dòng)類,其將被插件工廠加載和管理,一個(gè)插件包可以包括多個(gè)插件啟動(dòng)類,每個(gè)插件啟動(dòng)類可以實(shí)現(xiàn)自己的業(yè)務(wù)接口對(duì)外提供服務(wù);
@Plugin
注解參數(shù)說(shuō)明:
id:插件唯一ID,若未填寫(xiě)則使用初始化類名稱進(jìn)行MD5加密后的值做為ID;
name:插件名稱,默認(rèn)為"";
alias:插件別名,默認(rèn)為"";
author:插件作者,默認(rèn)為"";
email:聯(lián)系郵箱,默認(rèn)為"";
version:插件版本,默認(rèn)為"1.0.0";
automatic:是否加載后自動(dòng)啟動(dòng)運(yùn)行,默認(rèn)true;
description:插件描述,默認(rèn)為"";
IPlugin接口方法說(shuō)明:
init:插件初始化;
getPluginContext:返回插件環(huán)境上下文對(duì)象;
isInited:返回插件是否已初始化;
isStarted:返回插件是否已啟動(dòng);
startup:?jiǎn)?dòng)插件;
shutdown:停止插件;
destroy:銷毀插件對(duì)象;
插件框架提供了一個(gè)封裝了IPlugin接口的AbstractPlugin抽象類,建議直接繼承,示例代碼:
@Plugin public class DemoPlugin extends AbstractPlugin { // 根據(jù)需要重寫(xiě)父類方法... }
結(jié)合業(yè)務(wù)接口的插件示例:
// 定義一個(gè)業(yè)務(wù)接口 public interface IBusiness { void sayHi(); } @Plugin(id = "demo_plugin", name = "DemoPlugin", author = "有理想的魚(yú)", 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."); } }
上面我們已經(jīng)創(chuàng)建了一個(gè)DemoPlugin插件并且實(shí)現(xiàn)了IBusiness業(yè)務(wù)接口,下面介紹如何使用插件和調(diào)用業(yè)務(wù)接口方法:
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(); } }
執(zhí)行結(jié)果:
Hi, from Plugin. Hi, from Plugin. shutdown.
注:同一個(gè)插件可以實(shí)現(xiàn)多個(gè)業(yè)務(wù)接口,若多個(gè)插件實(shí)現(xiàn)同一個(gè)業(yè)務(wù)接口,根據(jù)插件加載順序,最后加載的插件實(shí)例對(duì)象將替換前者;
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: