问题不在于语言。您的问题是您的技术非常不模块化。OSGi 不是一个库或秘密工具,当添加它时,它会神奇地为您提供模块化的所有好处,其中包括您想要的多个“类空间”。OSGi 为模块化应用程序提供了结构,即应用程序由内聚和最小耦合的组件构建而成。
您选择了流行但高度非模块化的技术,例如 Spring 和 Hibernate。这些技术不是模块化的,因为它们严重依赖单个类空间,因为它们普遍使用动态类加载 (Class.forName)。即,XML 文件中的每个类名都是动态加载的。这种范式不仅需要一个全局类空间(这些类名被有效地视为全局变量,这是任何 CS 学生都应该知道的),它还使用实现类的名称。在其模块之外使用实现类的名称是模块化的对立面。您的 ClassNotFoundExceptions 是 OSGi 告诉您有人不尊重其模块围栏。也就是说,模块化必须以您构建代码的方式出现,然后 OSGi 只提供一个底层来运行这些模块并强制它们的边界。
所以 OSGi 有一个非常优雅但被严重低估的技术来创建非常强大的模块,这些模块不会受到全局变量和实现细节泄漏的影响:uServices。这些 uService 是在规范包中指定的对象,并通过轻量级代理在模块之间共享。uServices 实际上不需要 Spring XML。
不幸的是,目前最先进的技术是,我们有很多 Java 开发人员从小就相信类加载技巧是您将开源项目粘合在一起的方式。
好消息是事情正在发生变化。目前,许多项目开始制作他们的 JAR 包(OSGi 在 maven Central 上的流行度排名第 33),尽管大多数端口只是提供标头(使用 maven Central 上下载最多的插件之一)。但是,一旦说了这一步,添加服务通常并不难。我受雇于 OSGi 联盟来加快这个过程。实际上,JPA 是我的首选!
回到你原来的问题:据我所知,只有 Java 支持类加载器,这是多个类空间的必要概念。我所知道的所有动态语言仅通过它们的类名绑定,有效地排除了您的要求。所以我相当有信心实际上没有其他选择......