`
huzhenyu
  • 浏览: 185092 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

动态加载jar

    博客分类:
  • JAVA
阅读更多
在eclipse中有个自动升级,可以直接通过一个互联上链接安装一新功能.在安装过程中无需重启其原理是怎么样实现的呢?URLClassLoader是解决问题的核心所在,下面一个简单的DEMO来实现JVM动态加载jar包
创建一个Animal接口:
package com.huzy.classLoader;
public interface Animal { 
    public String say(); 
} 

创建Dog实现Animal接口:
package com.huzy.classLoader;
public class Dog implements Animal { 
    public String say() { 
        return "wang wang"; 
    } 
}
将Dog类打包到dog.jar中,使用eclipse的export功能打包成jar(只需要选Dog类)
创建MyClassLoader类,实现URLClassLoader:
package com.huzy.classLoader;

import java.net.URL;
import java.net.URLClassLoader;

public class MyURLClassLoader extends URLClassLoader {
	public MyURLClassLoader(URL url) {
		super(new URL[] { url });
	}
	
	public static Object test(String str, String cls) {
		try {
			URL url = new URL(str);
			MyURLClassLoader t = new MyURLClassLoader(url);
			Class<?> c = t.findClass(cls);
			Animal animal = (Animal) c.newInstance();
			return animal.say();
		} catch (Exception ex) {
			ex.printStackTrace();
		}
		return "";
	}
}

此类用于动态加载一个jar到jvm,并通过反射调用jar中的class
创建Main,测试函数入口
package com.huzy.classLoader;

public class Main {
	public static void main(String[] args) {
		try {
			System.out.println(MyURLClassLoader.test("file:C:/temp/dog.jar", "com.huzy.classLoader.Dog"));
		} catch (Exception ex) {
			ex.printStackTrace();
		}
	}
}
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics