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里面进行设置。