【发布时间】:2015-11-20 19:00:57
【问题描述】:
假设我有一个项目K
K取决于lib.jar
在lib.jar中,有一个类名为x.y.z.Foo
如果我在 K 中创建相同的类 x.y.z.Foo ,那么在这个项目中,当我创建 Foo 的实例时,现在 JVM 将在 K 中使用 Foo strong> 而不是 lib.jar ?
如果它不稳定或依赖于某些东西,如何确保Foo应该使用K的版本而不是lib.jar?
【问题讨论】:
-
这取决于在类路径中哪个是第一个以及它在哪里被实例化。您可以查看自定义类加载器来解决这个问题。
-
听起来您正在寻找一扇通往痛苦世界的大门,如果不是为自己,那么为以后可能不得不处理您的代码的人。您应该花一些时间阅读这篇文章,或者考虑使用 OSGi 或类似的东西,即使只是创建一个大型捆绑包。如果您决定走自己的路,您应该研究一条类似的井道,以了解可能会出现什么样的意外颠簸(在一个地方获得正确的版本可能只是一小步)。
-
这就是JAR Hell 的意义所在。
-
@jackalope 运行时性能完全不会受到构建/加载时间编织的影响,只有在适当的运行时编织时才会受到轻微影响。如果做得好,维护很大程度上就是 AOP 的全部内容(即使这不是它的预期用途,可维护性也不会改变)。 AOP 在像 Spring 这样的轻量级框架中的广泛使用证明了这两个方面。从您的角度来看,这显然不是一个可行的答案,但其他人可以考虑这个问题。
标签: java overriding classloader