Java URLClassLoader实现插件功能开发

插件(Plugin)是什么不用多说,用过Eclipse就知道Eclipse有很多插件。但本文的内容不是Eclipse插件开发。

插件是根据软件提供的接口编写出来的程序,很多软件都支持插件,例如Eclipse、Photoshop、VisualStudio。插件可以动态给软件添加一些功能,也可以随时删除,这样的好处是任何人都可以给这个软件进行功能上的扩展,而不用去改软件本身的代码。

一、适用场景

比如需要开发一个系统,用来将一些有数据推送给客户,至于是什么数据不是重点。有三个客户:A客户需要把数据组织成一个xml格式的文件,通过FTP上传到客户服务器上;B客户需要把数据组织成一个json,通过HTTP请求提交;C客户希望生成一个Excel文件再通过E-mail发送...以后可能还会有更多的客户,也还会有更多操蛋的需求。

对于这样一个系统的开发,如果使用普通的方式开发,那么每增加一个客户就要修改一次系统代码,在代码中增加一个针对某个客户的功能,很不灵活。如果再减少一个客户,那么其对应的代码也就没有用了,是不是要删除掉又成了问题。

以上只是一个例子,在实际开发中经常会有类似的情形,此时使用插件化的方式会更灵活。

可以把数据的获取和整理这块和客户无关的逻辑放在主程序中,而主程序提供一个客户推送的接口,接口定义一个未实现的抽象方法“推送数据”,这个方法由各个客户对应的插件来实现。这样新增一个客户需求,不需要修改主程序的代码,只需要实现这个接口就行,插件写好打成jar包放在指定目录下,再配置一下,主程序就可以使用这个插件了。当不需要这个插件,也可以通过配置来去掉它。

二、主程序配置插件

上面说到主程序可以通过配置来动态添加和删除插件,配置的方式一般有两种:XML或数据库,二者选其一即可。

方法1:XML

主程序可以通过一个xml配置文件,动态配置插件。

<?xml version="1.0" encoding="UTF-8"?>
<plugins>
	<plugin>
		<name>A客户插件</name>
		<jar>D:/plugin/a-plugin.jar</jar>
		<class>com.xxg.aplugin.APlugin</class>
	</plugin>
	<plugin>
		<name>B客户插件</name>
		<jar>D:/plugin/b-plugin.jar</jar>
		<class>com.xxg.bplugin.BPlugin</class>
	</plugin>
	<plugin>
		<name>C客户插件</name>
		<jar>D:/plugin/c-plugin.jar</jar>
		<class>com.xxg.cplugin.CPlugin</class>
	</plugin>
</plugins>

主程序通过解析这个XML来调用插件,<plugin>元素即一个插件,可以通过添加和删除<plugin>元素来动态的添加和删除插件。<name>是插件名称,<jar>是插件jar文件所在的路径,<class>是插件实现主程序接口的类。

方法2:数据库

如果使用数据库来配置插件,需要一个插件表:

插件表(plugin_info):

id

int

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值