hi, 你的find class用法有问题
你在findClass里面用了父类的方法寻找class,如果找到了,你的classloader还有什么意义呢?
[code="java"] Class<?> c = super.defineClass(null, bb.array(), 0, bb.capacity());[/code]
capacity不一定是你bb真正的结尾,你要明白。
我给你看我写的例子好了
[code="java"]
public class MyClassLoaderOne extends ClassLoader {
public static final String PATH = "/home/saarixx/IdeaProjects/q&a-javaeye/classloader-meta/target/classes/";
public Class findClass(String name) {
byte[] b = loadClassData(name);
return defineClass(name, b, 0, b.length);
}
private byte[] loadClassData(String name) {
// load the class data from the connection
String path = PATH + name.replace(".", "/") + ".class";
Preconditions.checkArgument(new File(path).exists(), path);
FileInputStream in = null;
ByteArrayOutputStream out = null;
try {
int c;
in = new FileInputStream(path);
out = new ByteArrayOutputStream();
while ((c = in.read()) != -1) {
out.write(c);
}
return out.toByteArray();
} catch (IOException e) {
e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates.
} finally {
if (in != null) {
try {
in.close();
} catch (IOException e) {
e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates.
}
}
if (out != null) {
try {
out.close();
} catch (IOException e) {
e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates.
}
}
}
return null;
}
// public String toString() {
// return String.format("classloaderOne ----\n getClass-classloader : %s\nthread-context-classloader : %s", getClass().getClassLoader(), Thread.currentThread().getContextClassLoader());
// }
}
[/code]
[quote]
Class personClazzOne = myClassLoaderOne.loadClass("com.imbeneo.classloader.demo.meta.Person");
[/quote]
我这个load的class也有父类,但是没有问题