您的位置:首页 > 编程语言 > Java开发

Java URLClassLoader动态加载外部java代码

2017-08-14 22:42 369 查看

外部代码

package priv.tuyou;

public class Say {

public void say(){

System.out.println("say priv.tuyou.hello");
}
}


存放路径



动态加载示例
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLClassLoader;

import priv.tuyou.Say;

public class URLPathClassLoader extends URLClassLoader{

private String packageName = "priv.tuyou";

public URLPathClassLoader(URL[] classPath, ClassLoader parent){

super(classPath, parent);
}

@Override
protected Class<?> findClass(String name) throws ClassNotFoundException {

Class<?> aClass = findLoadedClass(name);
if(aClass != null){

return aClass;
}
if(!packageName.startsWith(name)){

return super.loadClass(name);
}
return null;
}

public static void main(String[] args) throws MalformedURLException, ClassNotFoundException, SecurityException, NoSuchMethodException, InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException {

URL[] urls = {new URL("file://Users/apple/temp")};
URLPathClassLoader urlPathClassLoader = new URLPathClassLoader(urls, getSystemClassLoader());
Class say = urlPathClassLoader.findClass("priv.tuyou.Say");
Method method = say.getMethod("say");
Object instance = say.newInstance();
method.invoke(instance);

Say say2 = (Say)instance;
say2.say();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java