如何从引导级别加载系统级别的类

时间:2014-11-10 02:50:04

标签: java classloader bootstrapping

我有一个我在system.jar中定义的类,我从classpatch加载它。但是在我放入$ JAVA_HOME / jre / lib / ext的bootstrap.jar中。我需要加载一个在system.jar中定义的类。我怎么加载它?

我知道。当Tomcat启动时,它会创建一组类加载器,这些加载器被组织成以下父子关系,其中父类加载器位于子类加载器之上:

  Bootstrap
      |
   System
      |
   Common
   /     \

Webapp1 Webapp2 ...

没有办法用我的想法加载课程?

谢谢,

1 个答案:

答案 0 :(得分:3)

类加载器层次结构为Bootstrap Loader → Extension Loader → Application Loader

并且,尽管它的名称,ClassLoader.getSystemClassLoader()将返回应用程序加载器,它将使用提供的用户CLASSPATH解析类。

因此,从bootstrap.jar中包含的类(当放置在jre/lib/ext中时将由扩展加载程序加载),您可以使用ClassLoader.getSystemClassLoader() .loadClass("class.within.your.classpath")加载来自system.jar的课程。

作为旁注,在此典型设置中,如果扩展加载程序已加载ClassLoader.getSystemClassLoader().getParent()==MyClass.class.getClassLoader(),则表达式true将评估为MyClass