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就是其中之一。还有很多加载方式,我们下次再进行实例说明
简要介绍一下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就是其中之一。还有很多加载方式,我们下次再进行实例说明
相关文章推荐
- java URLClassLoader使用方法和实例
- Java通过URLClassLoader让程序支持插件扩展
- java中使用URLClassLoader访问外部jar包的java类
- URLClassLoader使用方法和实例
- URLClassLoader使用方法和实例
- Java URLClassLoader
- JAVA反射使用实例和class.getResource()得到URL中含有中文和空格乱码问题
- JAVA基础知识之JVM-——URLClassLoader
- Java URLClassLoader和ClassLoader
- URLClassLoader使用方法和实例 类加载器
- Java运行时动态加载类之URLClassLoader
- URLClassLoader使用方法和实例
- JAVA ClassLoader实例和Singleton模式结合
- 运用URLClassLoader加载外部jar包的java类,生成Class文件
- Java使用URLClassLoader加载指定位置的类
- Java通过URLClassLoader让程序支持插件扩展
- Java加密部署,使用自定义的classloader解密的方法实例
- 关于jdk中类装载器ClassLoader扩展和JNI技术(JavaNativeInterface)以及类文件的加密解密算法
- Java URLClassLoader 和 ClassLoader类加载器
- 运用URLClassLoader加载外部jar包的java类,生成Class文件