您现在的位置是:首页
>
classloader加载原理 Tomcat类加载机制
Tomcat类加载机制 Tomcat Server在启动的时候将构造一个Cla Loader树 以保证模块的类库是私有的 Tomcat Server的Cla Loader结构如下 代码 Boot
Tomcat类加载机制
Tomcat Server在启动的时候将构造一个ClassLoader树 以保证模块的类库是私有的 Tomcat Server的ClassLoader结构如下
代码 Bootstrap | System | Common / Catalina Shared / WebApp WebApp 其中 Bootstrap 载入JVM自带的类和$JAVA_HOME/jre/lib/ext/* jar System 载入$CLASSPATH/* class Common 载入$CATALINA_HOME/mon/ 它们对TOMCAT和所有的WEB APP都可见 Catalina 载入$CATALINA_HOME/server/ 它们仅对TOMCAT可见 对所有的WEB APP都不可见 Shared 载入$CATALINA_HOME/shared/ 它们仅对所有WEB APP可见 对TOMCAT不可见(也不必见) WebApp 载入ContextBase?/WEB INF/ 它们仅对该WEB APP可见每个运行中的线程都有一个成员contextClassLoader 用来在运行时动态地载入其它类 系统默认的 contextClassLoader是systemClassLoader 所以一般而言java程序在执行时可以使用JVM自带的类 $ JAVA_HOME/jre/lib/ext/中的类和$CLASSPATH/中的类 可以使用Thread currentThread() setContextClassLoader( );更改当前线程的contextClassLoader 来改变其载入类的行为
ClassLoader被组织成树形 一般的工作原理是 ) 线程需要用到某个类 于是contextClassLoader被请求来载入该类 ) contextClassLoader请求它的父ClassLoader来完成该载入请求 ) 如果父ClassLoader无法载入类 则contextClassLoader试图自己来载入注意 WebApp?ClassLoader的工作原理和上述有少许不同 它先试图自己载入类(在ContextBase?/WEB INF/ 中载入类) 如果无法载入 再请求父ClassLoader完成

lishixinzhi/Article/program/Java/ky/201311/28494
很赞哦! (1044)