任意のパスでのロードクラス

1412 ワード

送信によって得られるクラスの情報といえば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ディレクトリの下に置くことを前提とする