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

来源:互联网 发布:淘宝被买家投诉售假 编辑:程序博客网 时间:2024/06/05 23:57

笔记:

   简要介绍一下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就是其中之一。还有很多加载方式,我们下次再进行实例说明