java技術之UrlClassLoader 實例 -- 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就是其中之一。還有很多加載方式,我們下次再進行實例說明

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章