java动态加载jar包,并运行其中的类和方法

动态加载jar包,在实际开发中经常会需要用到,尤其涉及平台和业务的关系的时候,业务逻辑部分可以独立出去交给业务方管理,业务方只需要提供jar包,就能在平台上运行。

下面通过一个实例来直观演示:

第一:定义一个抽象类 AbstractAction (稍后换成接口的实例),可以是接口

第二:写个实体类继承一下 TestAction

第三:将TestAction所在的包导出成jar包的方式

类中应用到其他jar的情况,不能简单打成jar,参考另一个blog关于把引用的第三方jar合并到自己的jar 里面

第四:写个main函数测试下 TestMain (这写了个从文件读的方式获取jar路劲,路径就是上面提到的jar所在的位置)

public static void main(String[] args) {
		try {
			//第一种  配置成文件格式
			File file = new File("D:\\jarload\\test.txt");
			BufferedReader in = new BufferedReader(new FileReader(file));
			String s = new String();
			while ((s = in.readLine()) != null) {
 
				URL url = new URL(s);
				s = null;
				
				URLClassLoader myClassLoader = new URLClassLoader(new URL[] { url }, Thread.currentThread()
						.getContextClassLoader());
				Class<? extends AbstractAction> myClass = (Class<? extends AbstractAction>) myClassLoader.loadClass("com.java.jarloader.TestAction");
				AbstractAction action = (AbstractAction) myClass.newInstance();
				String str = action.action();
				System.out.println(str);
				
				//第二种
				URL url1 = new URL("file:D:/jarload/test.jar");
				URLClassLoader myClassLoader1 = new URLClassLoader(new URL[] { url1 }, Thread.currentThread()
						.getContextClassLoader());
				Class<?> myClass1 = myClassLoader1.loadClass("com.java.jarloader.TestAction");
				AbstractAction action1 = (AbstractAction) myClass1.newInstance();
				String str1 = action1.action();
				System.out.println(str1);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
 

猜你喜欢

转载自blog.csdn.net/zhuchunyan_aijia/article/details/81213408