zoukankan      html  css  js  c++  java
  • ClassLoader对jar的一个处理方式

    /**
     * @author tom
     *
     * 这个类测试动态载入jar文件中的类
     */
    public class JarLoader
    {
     private static void test(String[] args) throws Exception
     {
      Object obj =   new MyAppClassLoader("").loadClass("TestCCL").newInstance();
      System.out.println( "loaded? " + obj );
     }
     public static void main(String[] args)
     {
      try
      {
       test(args);
      }
      catch(Exception e)
      {
       e.printStackTrace();
      }
     }
    }


    public class MyAppClassLoader extends URLClassLoader
    {
     String m_jarFile = "E:\\javaproject\\classloaderTest\\bin\\test.jar";
     public MyAppClassLoader(String jarFile)
     {   
      super(new URL[0]);
      if(jarFile != null && jarFile.length() > 0)
      {
       this.m_jarFile = jarFile;
      }
     }
     
     public Class loadClass(String name) throws ClassNotFoundException
     { 
      System.out.println("MyAppClassLoader loadClass!!");
      try
      {
       URL url = new java.io.File(m_jarFile).toURL();
       return new URLClassLoader(new URL[]{url}).loadClass(name);   
      }
      catch(Exception e)
      {
       e.printStackTrace();
      }
      return super.loadClass(name);
     }
    }

    public class TestCCL
    {
     public TestCCL()
     {
      System.out.println("CCL Run!!!");
      //new BB();
      try
      {
       Class.forName("BB").newInstance();
       //new BB();
      }
      catch(Exception e)
      {
       e.printStackTrace();
      }
     }
     public static void main(String[] args)
     {
      
     }
    }
    public class BB
    {
     public BB()
     {
      System.out.println("BB construct");
     }
    }

    打出来的结果是
    MyAppClassLoader loadClass!!
    CCL Run!!!
    BB construct
    loaded? TestCCL@93dee9

    “CCL Run!!!”这句话为什么只出现了一次呢,照理Class.forName("BB")是用了MyAppClassLoader 的,为什么没有到loadClass方法呢,
    怪了.

  • 相关阅读:
    PHP 获取完整URL地址
    竖向 两级手风琴 TAB 栏
    Log4Net 用法记录
    C# 正整数和非零正整数校验
    NewtonSoft对象转json时,把 NULL 转 "" , 过滤 NULL, DateTime 时间类型去除 T
    SQL 事务
    SQL insert 主键冲突
    【记录】无法读取配置节“AppSettings”,因为它缺少节声明
    asp.net 前后台数据交互方式(转)
    php 生成文件txt到指定目录
  • 原文地址:https://www.cnblogs.com/xiaotaoliang/p/100503.html
Copyright © 2011-2022 走看看