假设一个photoshop工程,对照片可以有很多种风格效果的装饰,有一些装饰效果photoshop开发组可以自己开发并且放在发布版本里面发布。那么大家都可以使用这种效果。但是如果用户想开发自己的装饰效果怎么办? 难道跑到ps开发组去,把自己的代码给人家,让人家把自己的代码放进人家的ps大工程里面,编译然后发布到下面一个新的发布版本里面吗,公布给社会嘛?如果人家不同意怎么办? 那自己开发的岂不是白费,可扩展性岂不是太差了?
那么在这种情况下,便出现了插件工程的开发概念。ps开发组设计好一种支持效果装饰功能的接口。把这个接口公布给社会,所有个体用户可以都扩展这个接口,实现里面规定的方法。在ps主程序里面提供了一些使用这些接口方法的代码。然后可以把任何实现了这个接口的类加载到主程序中,并且运行在接口里面定义好的方法。那么用户自己实现了接口里面定义好的方法,实现好自己设计的装饰效果,就可以被主程序加载,并且对照片进行用户自己的定义的装饰效果。
那么这些独立的装饰效果就可以被理解为独立的插件工程,可以都由社会各个独立的团体自己开发,只需要到时候在自己电脑上把自己的插件工程跟主程序连接起来,就可以使用自己设计的插件了。而在photoshop方面,开发组只需要定义好接口,只需要负责自己的主程序,也不需要把社会上所有的开发的插件都加到主程序里面全部一次性的编译,并且发布。 这样就极大化的支持了开发的自由性。
支持插件开发概念的主要技术则主要是依靠Java的动态类加载功能,以及类的动态绑定技术。
通过一个例子也许更好的能解释所有东西。
首先建立一个interface类,然后导出成一个jar包。在主程序和插件程序中都把这个jar当成类库加入。
package printInterface;
public interface MyActionInterface {
public void print();
}
导出jar文件名叫做interface.jar
然后在插件工程里面实现这个接口,并且也导出一个jar包,拷贝到跟主程序main方法类的同一文件夹中,一般class文件都在bin文件夹中
public class MyAction implements printInterface.MyActionInterface {
@Override
public void print() {
System.out.println("Now you have used my Plug-in");
}
}
导出jar包名叫myActionPlug-in.jar
下面是主程序,在其中动态加载了插件工程,如果插件工程能被搜索到,那么就执行插件功能,如果被搜索不到,那么就什么都不执行。
import java.NET.URL;
import java.net.URLClassLoader;
public class MyActionMain {
/**
* @param args
* @throws ClassNotFoundException
* @throws IllegalAccessException
* @throws InstantiationException
*/
public static void main(String[] args) throws ClassNotFoundException,
InstantiationException, IllegalAccessException {
// 首先得到plugin的url(plugin插件拷在跟MyActionMain.class同一个文件夹中默认是bin文件夹中)
URL url = MyActionMain.class.getResource("myActionPlug-in.jar");
// 得到类加载器
URLClassLoader loader = new URLClassLoader(new URL[] { url });
// 得到plugin类的类对象
Class clazz = loader.loadClass("MyAction");
// 如果有这个插件,就进行下面的动作,如果没有这个插件就返回
if (clazz == null) {
return;
}
// 对这个类进行实例化
Object obj = clazz.newInstance();
// 把Object转换成接口类型
printInterface.MyActionInterface mai = (printInterface.MyActionInterface) obj;
// 动态绑定,运行实现了这个接口的类的方法
mai.print();
}
}
注意这里是明确指定了插件所在的位置,要想更灵活的定位插件,或者让主程序在运行的时候自己主动寻找可以加载的插件,并且可以利用这些插件。那么就要在plug.xml里面进行设置。如果想进一步了解信息,就可以查找更多的材料。
word如何进行全文分栏和某段落分栏 word如何进行全文分栏和某段落分栏的区别
word如何进行全文分栏和某段落分栏 在Word2003中,我们可以对一篇文章进行分栏设置,分两栏,分三栏都可以自己设置.像我们平常看到的报纸.公告.卡片.海报(33)人阅读时间:2024-09-12word2010大纲怎么显示(word2010大纲级别怎么设置)
word2010大纲怎么显示(word2010如何使用大纲视图) 有些时候我们在网上下载的一些word文档太长了,我们其实可以显示大纲,看清楚每一节是否有自己需(25)人阅读时间:2024-09-12七种常见的Word打印设置技巧(七种常见的word打印设置技巧)
七种常见的Word打印设置技巧 七种常见的Word打印设置技巧 1.打印指定页码 有些时候,我们只希望打印文档中的某些页码,只要点击菜单命令"文件→打印",在打(24)人阅读时间:2024-09-12四种方框内打钩符号的简易方法(四种方框内打钩符号的简易方法视频)
四种方框内打钩符号的简易方法 如何在Word方框里打钩? 四种方框内打钩符号的简易方法 如何在Word方框里打钩? 一.在方框里打钩的方法一 利用带圈数字来(25)人阅读时间:2024-09-12word如何进行全文分栏和某段落分栏 word如何进行全文分栏和某段落分栏的区别
word如何进行全文分栏和某段落分栏 在Word2003中,我们可以对一篇文章进行分栏设置,分两栏,分三栏都可以自己设置.像我们平常看到的报纸.公告.卡片.海报..2024-09-12word2010大纲怎么显示(word2010大纲级别怎么设置)
word2010大纲怎么显示(word2010如何使用大纲视图) 有些时候我们在网上下载的一些word文档太长了,我们其实可以显示大纲,看清楚每一节是否有自己需..2024-09-12七种常见的Word打印设置技巧(七种常见的word打印设置技巧)
七种常见的Word打印设置技巧 七种常见的Word打印设置技巧 1.打印指定页码 有些时候,我们只希望打印文档中的某些页码,只要点击菜单命令"文件→打印",在打..2024-09-12四种方框内打钩符号的简易方法(四种方框内打钩符号的简易方法视频)
四种方框内打钩符号的简易方法 如何在Word方框里打钩? 四种方框内打钩符号的简易方法 如何在Word方框里打钩? 一.在方框里打钩的方法一 利用带圈数字来..2024-09-12word怎么调整纸张的尺寸大小? word怎样调纸张大小
word怎么设置文档的水印呢?(word文档中怎么设置水印)
Word文档中表格的单个单元格边框怎么设置
使用Word制作成绩表表格的方法 表格制作excel教程成绩表
怎么批量导出Word文档中所有图片 word批量导出图片并分别储存
Word文档怎么设置自动保存 wpsword文档怎么设置自动保存
word怎么设置自动滚动页面(word怎么设置自动滚动页面)
Word实现Excel表格分栏打印的方法 word表格分页打印
Word2013怎么自定义SmartArt图形形状样式?
怎样去掉Word文档中的手动换行符(怎样去掉word文档中的手动换行符号)