网站建设贰金手指下拉,租赁公司租赁业务,国外ip,网站301和302不遵循双亲委托 在JVM中并不是一次性地把所有的文件都加载到#xff0c;而是按需加载#xff0c;加载机制采用 双亲委托原则#xff0c;如下图所示#xff1a;
BootStrapClassLoader 引导类加载器ExtClassLoader 扩展类加载器AppClassLoader 应用类加载器CustomClassLoad…不遵循双亲委托 在JVM中并不是一次性地把所有的文件都加载到而是按需加载加载机制采用 双亲委托原则如下图所示
BootStrapClassLoader 引导类加载器ExtClassLoader 扩展类加载器AppClassLoader 应用类加载器CustomClassLoader 用户自定义类加载器 类的加载过程是这样的 用户自己的类加载器把加载请求传给父加载器父加载器再传给其父加载器一直到加载器树的顶层 最顶层的类加载器首先针对其特定的位置加载如果加载不到就转交给子类如果一直到底层的类加载都没有加载到那么就会抛出异常ClassNotFoundException 因此按照这个过程可以想到如果同样在CLASSPATH指定的目录中和自己工作目录中存放相同的class会优先加载CLASSPATH目录中的文件。 Tomcat的类加载机制是违反了双亲委托原则的对于一些未加载的非基础类Object,String等,各个web应用自己的类加载器(WebAppClassLoader)会优先加载加载不到时再交给CommonClassLoader走双亲委托。对于标准类库中的类会让系统类加载器加载然后一直委托到启动类加载器这个过程是没有违背双亲委派的。
Tomcat 的类加载机制 启动类加载器Bootstrap 和 扩展类加载器 Extension ClassLoaderApplication ClassLoader应用程序类加载器这三个类加载和默认的一致。CommonClassLoader、CatalinaClassLoader、SharedClassLoader和WebappClassLoader则是Tomcat自己定义的类加载器。
CommonClassLoader Tomcat最基本的类加载器加载路径中的class可以被Tomcat容器本身以及各个Webapp访问位于CATALINA_HOME/lib下⽐如servlet-api.jarCatalinaClassLoaderTomcat容器私有的类加载器加载路径中的class对于Webapp不可见SharedClassLoader⽤于加载应⽤程序共享类这些类服务器不会依赖加载路径中的class对于所有Webapp可见但是对于Tomcat容器不可见WebappClassLoader每个应用在部署后都会创建一个唯一的类加载器⽤来加载本应⽤程序 /WEB-INF/classes 和 /WEB-INF/lib 下的类。 当应用需要到某个类时则会按照下面的顺序进行类加载
使用bootstrap引导类加载器加载【一般为JVM启动所需的类以及标准扩展类位于jre/lib/ext】使用系统类加载器加载【加载tomcat启动的类比如bootstrap的类】使用应用类加载器在WEB-INF/classes中加载使用应用类加载器在WEB-INF/lib中加载使用common类加载器在CATALINA_HOME/lib中加载