我有一个我在system.jar中定义的类,我从classpatch加载它。但是在我放入$ JAVA_HOME / jre / lib / ext的bootstrap.jar中。我需要加载一个在system.jar中定义的类。我怎么加载它?
我知道。当Tomcat启动时,它会创建一组类加载器,这些加载器被组织成以下父子关系,其中父类加载器位于子类加载器之上: Bootstrap
|
System
|
Common
/ \
Webapp1 Webapp2 ...
没有办法用我的想法加载课程?
谢谢,
答案 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
。