Chinaunix首页 | 论坛 | 博客
  • 博客访问: 529611
  • 博文数量: 135
  • 博客积分: 3568
  • 博客等级: 中校
  • 技术积分: 1942
  • 用 户 组: 普通用户
  • 注册时间: 2006-10-19 17:52
文章分类

全部博文(135)

文章存档

2012年(29)

2011年(41)

2010年(26)

2009年(12)

2008年(9)

2007年(12)

2006年(6)

分类: Java

2012-10-24 12:27:07


TestClassLoader.java

点击(此处)折叠或打开

  1. import java.io.File;
  2. import java.net.URL;
  3. import java.net.URLClassLoader;


  4. /**
  5.  * 项目中需要加载第三方提供的Java类,就先熟悉一下ClassLoader。
  6.  * 下面的测试:
  7.  * 1. 从指定的jar或class目录中加载相应的class。
  8.  * 2. 新定义的classLoader能继承现有的classLoader
  9.  *
  10.  * TODO:
  11.  * 1. 如何 unload/reload 已经加载的class?貌似OSGI作的更好吧。
  12.  * 每个class内部是保持了对加载它的ClassLoader的引用的。
  13.  * 每个对象实例与其对应的class之间又是何种关系?只能通过每次新建一个classLoader,让旧的被gc么?
  14.  *
  15.  * 2. 如何应用 SecurityManager?
  16.  *
  17.  * 参考:
  18.  *
  19.  *
  20.  *
  21.  */
  22. public class TestClassLoader {

  23.     public static void main(String[] args) throws Exception {
  24.         System.out.println("---------------------------");
  25.         testJar();

  26.         System.out.println("---------------------------");
  27.         testClassFolader();
  28.     }

  29.     @SuppressWarnings("unchecked")
  30.     public static void testJar() throws Exception {
  31.         String s = "F:/java/Apache Commons/commons-lang-2.3.jar";
  32.         File f = new File(s);
  33.         URL url = f.toURI().toURL();
  34.         System.out.println(url);
  35.         URLClassLoader classLoader = new URLClassLoader(new URL[] { url },
  36.                 TestClassLoader.class.getClassLoader());
  37.         Class c = classLoader.loadClass("org.apache.commons.lang.StringUtils");
  38.         System.out.println(c);
  39.         c = classLoader.loadClass("me.test.AAA"); // in current project "A"
  40.         System.out.println(c);
  41.         printClassPath(classLoader);
  42.     }

  43.     @SuppressWarnings("unchecked")
  44.     public static void testClassFolader() throws Exception {
  45.         String s = "E:/workspace/A1/build/classes";
  46.         File f = new File(s);
  47.         URL url = f.toURI().toURL();
  48.         System.out.println(url);
  49.         URLClassLoader classLoader = new URLClassLoader(new URL[] { url },
  50.                 TestClassLoader.class.getClassLoader());
  51.         Class c = classLoader.loadClass("me.test.BBB"); // in another project "A1"
  52.         System.out.println(c);
  53.         c = classLoader.loadClass("me.test.AAA");
  54.         System.out.println(c);
  55.         printClassPath(classLoader);
  56.     }

  57.     public static void printClassPath(URLClassLoader clsLoader)
  58.             throws Exception {
  59.         URLClassLoader loader = clsLoader;
  60.         if (clsLoader == null) {
  61.             loader = (URLClassLoader) ClassLoader.getSystemClassLoader();
  62.         }
  63.         URL[] urls = loader.getURLs();
  64.         for (int i = 0; i < urls.length; i++) {
  65.             System.out.println(urls[i].getFile());
  66.         }
  67.         if (clsLoader.getParent() != null) {
  68.             System.out.println("-----");
  69.             printClassPath((URLClassLoader) clsLoader.getParent());
  70.         }
  71.     }

  72. }

运行结果:

点击(此处)折叠或打开

  1. ---------------------------
  2. file:/F:/java/Apache%20Commons/commons-lang-2.3.jar
  3. class org.apache.commons.lang.StringUtils
  4. class me.test.AAA
  5. /F:/java/Apache%20Commons/commons-lang-2.3.jar
  6. -----
  7. /E:/stock-workspace/A/bin/
  8. -----
  9. /E:/DevIDE/jdk1.6.0_20/jre/lib/ext/dnsns.jar
  10. /E:/DevIDE/jdk1.6.0_20/jre/lib/ext/localedata.jar
  11. /E:/DevIDE/jdk1.6.0_20/jre/lib/ext/sunjce_provider.jar
  12. /E:/DevIDE/jdk1.6.0_20/jre/lib/ext/sunmscapi.jar
  13. /E:/DevIDE/jdk1.6.0_20/jre/lib/ext/sunpkcs11.jar
  14. ---------------------------
  15. file:/E:/workspace/A1/build/classes/
  16. class me.test.BBB
  17. class me.test.AAA
  18. /E:/workspace/A1/build/classes/
  19. -----
  20. /E:/stock-workspace/A/bin/
  21. -----
  22. /E:/DevIDE/jdk1.6.0_20/jre/lib/ext/dnsns.jar
  23. /E:/DevIDE/jdk1.6.0_20/jre/lib/ext/localedata.jar
  24. /E:/DevIDE/jdk1.6.0_20/jre/lib/ext/sunjce_provider.jar
  25. /E:/DevIDE/jdk1.6.0_20/jre/lib/ext/sunmscapi.jar
  26. /E:/DevIDE/jdk1.6.0_20/jre/lib/ext/sunpkcs11.jar

阅读(1251) | 评论(0) | 转发(0) |
0

上一篇:Joda Time 初试

下一篇:没有了

给主人留下些什么吧!~~