jspf插件框架

 

簡介: java

jspf (Java Simple Plugin Framework) 是一個插件框架,用於減小小型項目的的開發時間,增長代碼的可維護性。他徹底隱藏了組件的詳細實現,只用到他們的接口。加載組件所須要的代碼也不多,便於編寫。 緩存

jspf框架徹底基於java註釋實現 安全

@PluginImplementation,@InjectPlugin,@PluginLoaded,@Timer 網絡

和@Thread等. 框架

(關於java註釋:元數據從metadata一詞譯來,就是「關於數據的數據」的意思。愈來愈的開源框架都提供了「元數據」支持,其實也就是註釋支持。Annotation是從java5開始在語言級別提供的一項新特性,Annotation提供了一條與程 jsp

序元素關聯任何信息或者任何元數據(metadata)的途徑。從某些方面看,annotation就像修飾符同樣被使用,並應用於包、類型、構造方法、方法、成員變量、參數、本地變量的聲明中。這些信息被存儲在annotation的「name=value」結構對中。annotation類型是一種接口,可以經過java反射API的方式提供對其信息的訪問。) ide

支持:從JAR文件加載插件,從一個目錄加載多個插件,自動加載classpath中全部的插件,經過HTTP加載插件。線程安全。類型安全。支持緩存。插件能夠使用一個單獨的ClassLoader進行能夠分離 google

相應接口說明 url

PluginManager pm=PluginManagerFactory.createPluginManager(); spa

pm.addPluginsFrom(new File("myPluginDir/").toURI());

/*PluginManagerFactory類是爲了建立一個新的插件管理中心,這是使用jspf的入口和開始點。*/

public void addPluginsFrom(URI url, AddPluginsFromOption... options);

(@param1 url就是指加載插件的路徑

  @param2 忽略不使用)

/*插件管理器從指定路徑加載一個插件,這個路徑能夠是文件夾下的zip文件,jar文件,也能夠是類文件。插件管理器將尋找含有@PluginImplementation 註釋的類(classes),而且根據這個註釋來初始化插件*/

addPluginsFrom(new URI("classpath://*"))

加載全部插件在當前的類路徑

addPluginsFrom(new File("plugins/").toURI())

 加載全部指定路徑內的插件

addPluginsFrom(new File("plugin.jar").toURI())

加載一個jar格式的插件

addPluginsFrom(new URI("http://sample.com/plugin.jar"))

從網絡路徑上下載而且加載插件

addPluginsFrom(new ClassURI(ServiceImpl.class).toURI())

直接加載一個插件實現的類文件

public <P extends Plugin> P getPlugin(Class<P> plugin, GetPluginOption... options);

(@param1 plugin就是指插件的類文件,如plugin1.class....

  @param2 忽略不使用)

如何使用:

經過http://code.google.com/p/jspf/downloads/list 

下載文件,在java工程中導入jspf.core-1.0.0.jar,仿照下面介紹的簡單例子就能夠實現一個簡單的插件管理程序。

代碼示例:利用jspf框架加載兩個插件的實現

1. 建立一個java接口文件CoolPlugin,代碼以下:

package coolplugin;

import net.xeoh.plugins.base.Plugin; 

public interface CoolPlugin extends Plugin

{

public String sayCool();

}

extends Plugin其中Plugin是jspf.core-1.0.0.jar中package net.xeoh.plugins.base中提供的public interface Plugin

建立一個java類文件,CoolPluginImpl,代碼以下:

package impl;

import coolplugin.CoolPlugin;

import net.xeoh.plugins.base.annotations.PluginImplementation;

@PluginImplementation

public class CoolPluginImpl implements CoolPlugin

{

public String sayCool()

{

return "Hello!Cool!";

}

}

(上述插件接口的實現@PluginImplementation不可少

這樣就完成了第一個Cool插件的編寫

2. 建立一個java接口文件HotPlugin,代碼以下:

package hotplugin;

import net.xeoh.plugins.base.Plugin; 

public interface HotPlugin extends Plugin

{

public String sayHot();

}

建立一個java類文件,HotPluginImpl,代碼以下:

package impl;

import hotplugin.HotPlugin;

import net.xeoh.plugins.base.annotations.PluginImplementation;

@PluginImplementation

public class HotPluginImpl implements HotPlugin

{

public String sayHot()

{

return "Hello!Hot!";

}

}

這樣就完成了第二個Hot插件的編寫

3.編寫插件管理中心main,代碼以下

public static void main(String[] args) throws MalformedURLException

{

PluginManager pm = PluginManagerFactory.createPluginManager();

/*load classpath*/

pm.addPluginsFrom(new File("bin/").toURI());

CoolPlugin plugin1 = pm.getPlugin(CoolPlugin.class);

System.out.println(plugin1.sayCool());

HotPlugin plugin2 = pm.getPlugin(HotPlugin.class);

System.out.println(plugin2.sayHot());

}

運行後獲得的結果是

"Hello!Cool!"

"Hello!Hot!"

利用"addPluginsFrom("...",new OptionReportAfter());"監視方法,能夠得到詳細信息:

Class Report <<<

    ****.CoolPluginImpl (status:'SPAWNED'; dependencies:''; origin:'file:*****;)

    ****.HotPluginImpl (status:'SPAWNED'; dependencies:''; origin:'file****/';)

>>> Object Report <<<

    ****.CoolPluginImpl @162db76 (status:'ACTIVE')

****.HotPluginImpl @21a14e (status:'ACTIVE')

說明兩個插件加載成功

相關文章
相關標籤/搜索