中说到启动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为
()
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/195110/viewspace-758288/
,如需转载,请注明出处,否则将追究法律责任。