如何在不同的类加载器之间共享对象?
我需要不同的类加载器才能卸载类。 但我需要在它们之间共享对象(实际上我得到的是ClassCastException)。 那么解决这个问题的解决方案是什么? 谢谢
来自不同类加载器的对象可以通过由公共类加载器加载的接口和类相互交互。
使用单独的类加载器的主要目标之一是完全防止您尝试执行的操作。 安全性和名称冲突是保持这种隔离的充分理由。 以下是一些可以绕过这种隔离的方法。
-
使用Common Class Loader
-
跨群集共享库
-
在另一个应用程序中打包一个应用程序的客户端JAR
有关更多详细信息,请参阅此链接 。
还要提一下,如果你使用的是接口,你可以使用java.lang.reflect.Proxy创建一个你的类加载器本地接口的实例,它在引擎盖下通过reflection对“真实”(外来)对象进行调用来自不同的类加载器。 它很难看,如果参数或返回类型不是原始的,那么你将只是将ClassCastException传递给它。 虽然你可以通过一些方法来完成这项工作,但总的来说,最好是拥有一个父类加载器,其中包含一些您希望能够跨类加载器使用的共享类型,或者使用更多…序列化格式进行通信(较慢),或仅共享处理原语的接口。