自定義插件工廠

2018-12-24 22:29 更新
自定義插件工廠有兩種方式:
  • 通過(guò)@PluginFactory注解配置插件工廠,注解參數(shù)說(shuō)明如下:

    參數(shù)說(shuō)明
    pluginHome插件存放路徑,必需提供;
    autoscanPackages自動(dòng)掃描路徑,默認(rèn)為插件工廠所在包路徑;
    automatic插件是否自動(dòng)啟動(dòng),默認(rèn)為true;
    includedClassPath是否加載當(dāng)前CLASSPATH內(nèi)的所有包含插件配置文件的JAR包,默認(rèn)為false;
    listenerClass插件生命周期事件監(jiān)聽(tīng)器類對(duì)象, 可選配置;

    示例代碼:

        @PluginFactory(pluginHome = "${root}/plugins")
        public class DemoPluginFactory extends DefaultPluginFactory {
        }
    
        // 或者
    
        @PluginFactory(pluginHome = "${root}/plugins",
                autoscanPackages = {"com.company", "cn.company"},
                automatic = true,
                includedClassPath = false,
                listenerClass = DemoPluginEventListener.class)
        public class DemoPluginFactory extends DefaultPluginFactory {
        }
    
  • 通過(guò)工廠配置對(duì)象實(shí)例化

    創(chuàng)建工廠配置對(duì)象:

        DefaultPluginConfig _conf = new DefaultPluginConfig();
        _conf.setPluginHome(new File(RuntimeUtils.replaceEnvVariable("${root}/plugins")));
        _conf.setAutomatic(true);
        _conf.setAutoscanPackages(Arrays.asList("com.company", "cn.company"));
        _conf.setIncludedClassPath(false);
        _conf.setPluginEventListener(new DefaultPluginEventListener());
    

    創(chuàng)建并初始化插件工廠實(shí)例對(duì)象:

        IPluginFactory _factory = new DefaultPluginFactory();
        _factory.init(_conf);
    

    自定義插件工廠的事件監(jiān)聽(tīng)方法:

    自定義插件工廠的事件處理方式與默認(rèn)插件工廠不同,須通過(guò)實(shí)現(xiàn)IPluginEventListener接口完成插件生命周期事件監(jiān)聽(tīng),IPluginEventListener接口事件方法及說(shuō)明如下:

    事件說(shuō)明
    onInited插件初始化事件;
    onStarted插件啟動(dòng)事件;
    onShutdown插件停止事件;
    onDestroy插件銷毀事件;

    示例代碼:

    public class DemoPluginEventListener implements IPluginEventListener {
    
        public void onInited(IPluginContext context, IPlugin plugin) {
            System.out.println("onInited: " + context.getPluginMeta().getName());
        }
    
        public void onStarted(IPluginContext context, IPlugin plugin) {
            System.out.println("onStarted: " + context.getPluginMeta().getName());
        }
    
        public void onShutdown(IPluginContext context, IPlugin plugin) {
            System.out.println("onShutdown: " + context.getPluginMeta().getName());
        }
    
        public void onDestroy(IPluginContext context, IPlugin plugin) {
            System.out.println("onDestroy: " + context.getPluginMeta().getName());
        }
    }
以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)