我们知道java类加载的工作原理如下图所示。
当我们在应用程序中有一个插件概念(比如app服务器)时,我们有时需要在实例类加载器而不是父类中加载一些类,以便每个新实例(插件,webapp或其他)加载特定班级不委托父母......
例如Log4j类,我们需要为每个实例加载它们。
所以为了做到这一点,我想到的最好的方法是编写自定义类加载器,它将获取一个类名列表,这些类名应该被阻止被委托给父类加载器(理想情况下我们希望实例完全隔离)。
因此,加载其他“实例”的应用程序将在加载这些“实例”时使用该自定义类加载器......
是否有解决此问题的类加载器的实现? (鉴于我们不想知道OSGi是什么,我们使用纯java没有框架等...)
我的搜索最终指向一些框架或某些特定于Web容器的解决方案,但这是一个非常简单的任务,可以通过一个类来解决,我想知道在开始实现它之前我是否遗漏了一些东西。
更新(深入挖掘):假设有一个由引导加载的类,它具有可以在实例之间共享的静态(我们真的很想确保实例完全隔离),现在该类显然不包含在我们的类路径,但它被加载,如果我们复制它而不是reffering它我们将实现所需的隔离。
那么我们是否有将类从一个类加载器复制或复制到另一个类加载器的概念?