CherrylinORC 2015-07-24
首先建立一个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里面进行设置。