tomcat9类加载器

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/ywlmsm1224811/article/details/91384620

我们都知道,tomcat9加载器结构如下图:

BoostrapClassLoader:启动类加载器,它是用本地代码实现的类装载器,负责将 JDK 中 jre/lib 下的 类库 或者 XBootClassPath指定的类库加载到内存中,开发者无法直接获取到该加载器的引用(本地代码实现),所以无法通过引用操作

ExtClassLoader:拓展类加载器,由sun公司sun.misc.Launcher$ExtClassLoader实现的,负责将JDK中 jre/lib/ext 或者 -Djava.ext.dir 指定的类库加载到内存,开发者可以直接使用拓展类加载器

AppClassLoader:系统加载器,,由sun公司sun.misc.Launcher$AppClassLoader实现的,负责将类路径 java -classpath 或者 -Djava.class.path 指定的类库加载到内存中,开发者可以直接使用系统加载器

CatalinaLoader:负责加载tomcat中catalina-home/lib 下的类库加载到内存,如下图:

CommonLoader 和 SharedLoader : 负责加载catalina-home/conf/catalina.properties 中具体指定的类库到内存,如下图所示:

ParallelWebappClassLoader:负责加载tomcat中每个应用的类包,每个应用对应一个 ParallelWebappClassLoader,这样子可以避免不同应用同名类加载冲突的问题,入口如下图所示:

这里有个问题,不同的应用怎么分别使用各自的ParallelWebappClassLoader(webappClassLoader)来加载各自领域的class和jar包呢,下面讲解为什么:

我们都知道,StandardContext 上下中加载 ParallelWebappClassLoader(webappClassLoader)时,两者产生了绑定关系,即不同的上下文绑定了不同的 ParallelWebappClassLoader,例如:

这也就解释了,如果我们要发布自己的应用时,只需要将应用包放到tomcat的webapps目录下可以的原因,放到这里tomcat启动时就会为应用创建属于自己的StandardContext上下文和ParallelWebappClassLoader加载器,调试源码如下图所示:

应用部署扩展:如果不想把应用直接部署到tomcat的webapps目录下也是可以的,需要在 tomcat/conf/server.xml 中增加一行,<Context path="" docBase="/home/10beiManager/webapps/10beiManager"></Context>,如下图所示:

至此,tomcat类加载源码分析我们已经告一段落了哦。

猜你喜欢

转载自blog.csdn.net/ywlmsm1224811/article/details/91384620