筆記:
簡要介紹一下urlClassloader 的作用。一般我們在開發中會經常用自已的方式加載與管理類。特別是在設計一套系統時。urlClassloader是一個不錯的選擇。他實現了從硬盤上以絕對路徑的方式加載類。tomcat,jboss底層就採用了這樣的方式來管理與加載自身的類。如tomcat api jar 等。在tomcat7中。urlClassloader是作爲配置加載類的一部分存在的,他不僅僅加載單個class,他還可以加載一個jar.如下實例讓我們來認識一下urlClassloader. 這裏只是初探。
HelloWorld 類
public class HelloWorld
{
public String sayHello(String s)
{
return s + " : helloWorld!!!";
}
public static void main(String []args)
{
System.out.println("HelloWorld");
}
}
TClassLoader 類
public class TClassLoader
{
public String [] getArray(int m)
{
if(m <= 0)
{
return null;
}
String iStr[] = new String[m];
for(int i=0; i<m; i++ )
{
iStr[i] = "a" + i;
}
return iStr;
}
}
將上述兩個類通過控制檯或eclipse打包成jar文件。分別放在某個盤符的某個目錄下。
接下來就是一個測試類。來實現jar的裝載與調用。
package com.taobao.util;
import java.io.File;
import java.lang.reflect.Method;
import java.net.URL;
import java.net.URLClassLoader;
import java.util.HashSet;
import java.util.Set;
public class ClassLoaderUtil extends URLClassLoader {
public ClassLoaderUtil(URL [] reposities) {
// TODO Auto-generated constructor stub
super(reposities);
}
public ClassLoaderUtil(URL [] reposities , ClassLoader parent)
{
super(reposities,parent);
}
public static void main(String []args) throws Exception
{
//自定義UrlClassLoader
ClassLoaderUtil util = null;
String urls[] = new String[]{"E:/urlclassloader/hello/HelloWorld.jar","E:/urlclassloader/tclass/TClassLoader.jar"};
Set<URL> s = new HashSet<URL>();
for(int i=0; i<urls.length; i++)
{
File f = new File(urls[i]);
f = new File(f.getCanonicalPath());
if(!f.exists() && !f.canRead())
{
continue;
}
URL url = f.toURI().toURL();
s.add(url);
}
URL [] u = s.toArray(new URL[s.size()]);
util = new ClassLoaderUtil(u);
Class class1 = util.loadClass("HelloWorld");
Object ojava = class1.newInstance();
Method method = class1.getMethod("sayHello", new Class[]{String.class});
System.out.println(method.invoke(ojava, new Object[]{"abc"}));
System.out.println(ClassLoaderUtil.class.getClassLoader());
}
}
//output
abc : helloWorld!!!
sun.misc.Launcher$AppClassLoader@19821f
上述操作告訴我們。java加載class的方式可以根據要求進行修改。urlClassLoader就是其中之一。還有很多加載方式,我們下次再進行實例說明