java沙盒或墙式类加载器将应用程序与运行时环境分离
Tomcat的Web应用程序被包装到一个。war文件并将其放入Tomcat中。应用程序可以使用war文件和包含的jar文件中的类。这将Tomcat的运行时类与应用程序类分开
使用storm时(请参见storm project.net),没有类似的隔离。相反,推荐的方法需要创建一个“fatjar”,表示从各自的jar中解包后包含所有必需类文件的jar。对于简单的情况,这是可行的,但生成的fat jar必须正确合并所有合并jar中的所有META-INF/*文件,这不会半自动工作
我会毫不犹豫地编写自己的类加载器,它模拟类似于war文件的东西。除了我不知道如何拦截加载我部署的所有类的默认类加载器之外
我的理论是,我的应用程序的一个类首先由默认的类装入器装入。大概在它的static
-部分中,我会施展魔法类加载器咒语,这样所有依赖类都将由我自己的类加载器加载,现在我将如何从我认为合适的任何地方获取必要的类
对于所描述的一般问题以及所需的特定魔法的任何提示,我们将不胜感激
# 1 楼答案
拦截类加载器:默认类加载器是加载当前正在执行的类的类加载器。因此,如果您使用一个单独的类加载器来引入WAR的入口点,那么来自它或其(运行时/创建)后代的每个类引用都将默认通过该类加载器。然后,该类加载器可以决定它应该引用更高级别的类加载器什么,以及它应该使用自己的解析规则重新加载什么。简单的规则“只向父级询问我在这个插件中没有的东西”,也称为“父级最后一个”,通常就足够了