首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

怎么构建一个插件框架

2012-10-27 
如何构建一个插件框架HOW TO MAKE PLUGIN FRAMEWORK本文将为你展示如何基于Java[1]构建一个完整可用的插件

如何构建一个插件框架

HOW TO MAKE PLUGIN FRAMEWORK

       本文将为你展示如何基于Java[1]构建一个完整可用的插件框架(Plugin Framework)。
关于Plugin Wikipedia[2]是这样描述的

public class PluginClassLoader extends URLClassLoader {private PluginImage image;private ClassLoader[] requireClassLoader;public PluginClassLoader(URL[] urls) {super(urls);}public PluginClassLoader(PluginImage image,ClassLoader parent) {super(image.getUrls(),parent);this.image = image;image.pluginClassLoader = this;if (image.getRequires() == null) {requireClassLoader = null;} else {requireClassLoader = new ClassLoader[image.getRequires().size()];for(int i=0;i<image.getRequires().size();i++){requireClassLoader[i] = PluginManager.getInstance().getPluginImage(image.getRequires().get(i).getId()).getPluginClassLoader();}}}protected Class<?> findClass(String name) throws ClassNotFoundException {Class<?> c = null;try {c = super.findClass(name);} catch (ClassNotFoundException e) {if (requireClassLoader == null)throw new ClassNotFoundException();else {for (ClassLoader l : requireClassLoader) {try {if (l != null)c = l.loadClass(name);} catch (ClassNotFoundException ee) {}}if (c == null) {throw new ClassNotFoundException();}}}return c;}protected String findLibrary(String name) {Hashtable<String, String> libs = image.getLibrarys();if (libs.containsKey(name)) {return libs.get(name);// full name} else if (libs.containsKey("lib" + name + ".so")) {return libs.get("lib" + name + ".so");} else {return null;}}public PluginImage getImage() {return image;}}

 
[1]:http://www.java.com/
[2]:http://zh.wikipedia.org/wiki/Plug-in
[3]:http://download.developers.sun.com.cn/javadoc/html/zh_CN/api/java/lang/ClassLoader.html

 

 

 

 

 

 

1 楼 瀚愚 2009-09-14   最近我也在思考如何将业务功能以插件的方式开发
web应用中如何实现呢?一个页面多一块少一块,加个样式什么的
好像很难实现,不知道楼主有没有一点思路 2 楼 tapestry1122 2009-09-14   瀚愚 写道最近我也在思考如何将业务功能以插件的方式开发
web应用中如何实现呢?一个页面多一块少一块,加个样式什么的
好像很难实现,不知道楼主有没有一点思路

atlassian把他们在jira,confluence中使用的插件框架tonic贡献给opensymphony了
可以看看,只可惜到现在还没有doc 3 楼 guooscar 2009-09-14   瀚愚 写道最近我也在思考如何将业务功能以插件的方式开发
web应用中如何实现呢?一个页面多一块少一块,加个样式什么的
好像很难实现,不知道楼主有没有一点思路
搞一个UI插件,按照扩展的方式 提供给其他插件调用,比如说注册一个菜单,注册一个按钮...等等
不过如果是最原始的jsp...不太好弄.
用gwt就容易多 4 楼 nepalon 2010-04-12   guooscar 写道瀚愚 写道最近我也在思考如何将业务功能以插件的方式开发
web应用中如何实现呢?一个页面多一块少一块,加个样式什么的
好像很难实现,不知道楼主有没有一点思路
搞一个UI插件,按照扩展的方式 提供给其他插件调用,比如说注册一个菜单,注册一个按钮...等等
不过如果是最原始的jsp...不太好弄.
用gwt就容易多
用jsp也是可以的,之前做过一个网站是用freemark和webwork2的,基本上页面的任何东西都可以定义并有单独的模板来实现,缺点是会导致大量的连接请求,如果页面定义了10个模块就要请求11次。后来通过oscache来缓存页面模块来减少请求次数。网址是:http://www1.travelrich.com.tw/newsList.action?objType=4&pageType=3这个网站目前还不是所有页面都改为javaee,只改了一部份(.action的为java实现的)。
大致原理是把页面的所有可能做成模块的地方定义一个位置信息,然后在DB中存放对应的模板。。。好久之前做的了,有需要我再找找以前的资料。 5 楼 shiren1118 2010-04-12   有现成的osgi为什么不用呢?

热点排行