说到通过发射获得类的信息大家自然想到了用Class.forName("xxxxx.xxx.xx");但是这种方法只能加载已经加载到 jvm的类;那么如果类没有被加载到jvm,而现在又要获得一个类的信息,而且该类可能位于任何路径,那应该如果做呢?方法是利用URLClassLoader的loadClass方法;demo路径如下:
public static void main(String[] args) {
File file=new File("D:/temp");
URL url=null;
try {
url = file.toURL();
System.out.println("url--"+url.getPath());
URL[] urls={url};
URLClassLoader classLoader=new URLClassLoader(urls);
Class class1=classLoader.loadClass("com.skywin.mps.web.servlet.SpServlet");
System.out.println("ClassName"+class1.getName());
Class paramClass[]={};
Method methods[]=class1.getDeclaredMethods();
for (int i = 0; i < methods.length; i++) {
Method tm=methods[i];
System.out.println(tm.getName());
}
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
前提是把上述的spservlet的class文件(包括包结构)放到d盘的temp目录下