本文是基于 git上的tomcat源码 https://github.com/apache/tomcat 版本e5e601c20a12bf67f1e913ad99747d716117ff1a进行编写
因为需要给开源项目Openfire提一个PR功能为可以任意切换集群的支持插件,在开发过程中发现在同一个JVM中
使用ClassLoader加载同样路径、名称的类时,ClassLoader会以第一次加载的类为基准,无论加载几次,后续使用loadClass方法都只会加载同一个类
而Openfire在启动集群时,会默认加载org.jivesoftware.openfire.plugin.util.cache.ClusteredCacheFactory这个类的实现对象,
该实现类对象在不同的集群支持插件中,虽然可以通过配置更改这个实现对象的路径,但是效果就不是特别完美了。
所以笔者想到了运用Tomcat的应用加载机制,想实现插件与插件之间的相互类隔离的功能。
在阅读Tomcat时发现Tomcat主要基于WebappClassLoaderBase这个类进行资源路径的加载
该类中有一个关键成员对象