【问题标题】:How to load class in system level from bootstrap level如何从引导级别加载系统级别的类
【发布时间】:2014-11-10 02:50:04
【问题描述】:

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

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

  Bootstrap
      |
   System
      |
   Common
   /     \

Webapp1 Webapp2 ...

没有办法用我的想法加载类?

谢谢,

【问题讨论】:

    标签: java classloader bootstrapping


    【解决方案1】:

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

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

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

    附带说明,在此典型设置中,如果 MyClass 已被扩展加载器加载,则表达式 ClassLoader.getSystemClassLoader().getParent()==MyClass.class.getClassLoader() 将计算为 true

    【讨论】:

      猜你喜欢
      • 2018-01-01
      • 2012-05-11
      • 1970-01-01
      • 1970-01-01
      • 2012-08-26
      • 1970-01-01
      • 1970-01-01
      • 2019-05-12
      • 2018-03-25
      相关资源
      最近更新 更多