文档章节

jspf插件框架

暗之幻影
 暗之幻影
发布于 2015/03/25 13:46
字数 996
阅读 72
收藏 0

 

简介:

jspf (Java Simple Plugin Framework) 是一个插件框架,用于减少小型项目的的开发时间,增加代码的可维护性。他完全隐藏了组件的详细实现,只用到他们的接口。加载组件所需要的代码也很少,便于编写。

jspf框架完全基于java注释实现

@PluginImplementation,@InjectPlugin,@PluginLoaded,@Timer

和@Thread等.

(关于java注释:元数据从metadata一词译来,就是“关于数据的数据”的意思。越来越的开源框架都提供了“元数据”支持,其实也就是注释支持。Annotation是从java5开始在语言级别提供的一项新特性,Annotation提供了一条与程

序元素关联任何信息或者任何元数据(metadata)的途径。从某些方面看,annotation就像修饰符一样被使用,并应用于包、类型、构造方法、方法、成员变量、参数、本地变量的声明中。这些信息被存储在annotation的“name=value”结构对中。annotation类型是一种接口,能够通过java反射API的方式提供对其信息的访问。)

支持:从JAR文件加载插件,从一个目录加载多个插件,自动加载classpath中所有的插件,通过HTTP加载插件。线程安全。类型安全。支持缓存。插件可以使用一个单独的ClassLoader进行可以分离

相应接口说明

PluginManager pm=PluginManagerFactory.createPluginManager();

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')

说明两个插件加载成功

本文出自 “永远的朋友” 博客,请务必保留此出处http://yaocoder.blog.51cto.com/2668309/563347

本文转载自:http://yaocoder.blog.51cto.com/2668309/563347

暗之幻影
粉丝 20
博文 377
码字总数 71245
作品 0
南京
高级程序员
私信 提问
Jetty9 启动时不能修改静态文件问题解决

jetty9的解决方案 1.在pom.xml加载jetty9插件 2.从本地获取webdefault.xml 从 jetty-webapp-9.4.5.v20170502.jar中拿webdefault.xml 复制到工程中 src/resource目录下这个jar包视版本而定,但...

yope
2017/10/28
37
0
Apache James jSPF 0.9.8 发布

Apache James jSPF是SPF规范的Java实现,关于SPF规范可以见官网. 简单的来说SPF就是一种防止伪造email的发件人地址,从服务器端防止垃圾邮件的一种规范。

nisen
2010/06/22
329
0
struts2表单校验问题

先看下我的配置 struts.xml

gezexu
2010/04/12
809
2
Jodd 3.5.1 发布,Java 常用工具包

Jodd = tools + ioc + mvc + db + aop + tx + html [2014-03-27] 3.5.1 更新记录 【变动】 `DbOom` 中移除了 *AndClose() 等方法,请使用 autoClose() 代替. 【修复】 Improved setPrepared......

zqq90
2014/03/28
1K
10
Nginx+Tomcat负载均衡超简易实现(上)

以前经常使用apache+tomcat多实例做负载均衡实现,近两天研究Nginx,下面是nginx+tomcat的负责均衡实现,过程非常简单,比起apache的配置,nginx的配置非常的清晰易懂,也很简洁,配置的过程...

飘雪一郎o
2012/12/26
646
0

没有更多内容

加载失败,请刷新页面

加载更多

Dubbo-自适应拓展机制

背景 在 Dubbo 中,很多拓展都是通过 SPI 机制进行加载的,比如 Protocol、Cluster、LoadBalance 等,这些都是Dubbo的基础组件。这些基础组件的拓展不是在系统框架启动阶段被加载,而是拓展方...

rock-man
13分钟前
3
0
Kali安装fcitx输入法(五笔)

安装fcitx > sudo apt-get install fcitx-rime fcitx-config-gtk3 重启 > sudo reboot fcitx配置 效果就是这样 配置输入法切换 系统设置...

yeahlife
15分钟前
3
0
IE之css3效果兼容

本文转载于:专业的前端网站▷IE之css3效果兼容 一、兼容css阴影效果(ie滤镜) 1.Shadow,阴影 .shadow { -moz-box-shadow: 3px 3px 4px #000; -webkit-box-shadow: 3px 3px 4px #000; box-sha...

前端老手
18分钟前
3
0
NiushopB2C开源商城功能列表说明:

B2C单商户免费版:PC商城+微商城 B2C单商户标准版:PC商城+微商城组合套餐+阶梯优惠核销功能 B2C单商户企业版:PC商城+微商城拼团+组合套餐阶梯优惠+核销功能 B2C单商户分销版:PC商城+微商城...

niushop-芳
20分钟前
3
0
图片如何转GIF图片呢

如何将生活中拍摄的好玩有趣的图片制作成GIF动图呢?相信很多小伙伴都不知道要如何制作,其实制作方法非常的简单,下面分享一个图片转GIF动图的方法,希望这个方法能够帮助大家在与好友斗图时...

白米稀饭2019
27分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部