ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 编写自己的ClassLoader时设置Thread的contextClassLoader

编写自己的ClassLoader时设置Thread的contextClassLoader

原创 Linux操作系统 作者:denglt 时间:2013-04-11 16:43:56 0 删除 编辑
中说到启动JVM时可以通过设置java.system.class.loader来指定自己编写的classloader.
 
当设定java.system.class.loader时:
通过Thread.currentThread().getContextClassLoader()获取的ClassLoader将是用户指定的;
 
这个在编写自己的ClassLoader时很重要,因为有些开源项目的代码会通过Thread.currentThread().getContextClassLoader()来获取ClassLoader.
如spring就是这样:
org.springframework.util.ClassUtils中:
 public static ClassLoader getDefaultClassLoader() {
  ClassLoader cl = null;
  try {
   cl = Thread.currentThread().getContextClassLoader();
  }
  catch (Throwable ex) {
   logger.debug("Cannot access thread context ClassLoader - falling back to system class loader", ex);
  }
  if (cl == null) {
   // No thread context class loader -> use class loader of this class.
   cl = ClassUtils.class.getClassLoader();
  }
  return cl;
 }
 
 
如Tomcat启动时没有通过设置java.system.class.loader来指定自己的ClassLoader的,但它设置了Thread的contextClassLoader为
“WebappClassLoader
  delegate: false
  repositories:
    /WEB-INF/classes/
----------> Parent Classloader:
org.apache.catalina.loader.StandardClassLoader@31d91824”
 
()
 

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/195110/viewspace-758288/ ,如需转载,请注明出处,否则将追究法律责任。

下一篇: 透明数据加密
请登录后发表评论 登录
全部评论

注册时间:2010-11-04

  • 博文量
    118
  • 访问量
    763931