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

java技术之UrlClassLoader 实例 -- UrlClassLoader的作用

2011-01-12 11:27 573 查看
笔记:

简要介绍一下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就是其中之一。还有很多加载方式,我们下次再进行实例说明
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: