这是我遇到的问题。有一个巨大的遗留应用程序在 java 1.3 上运行并使用外部 API,例如 MyAPI v1.0。MyAPI 1.0 的确切实现位于应用程序使用的类路径中的某个位置。还有一种机制允许该应用程序使用外部代码(某种插件机制)。现在我有另一个使用 MyAPI v2.0(与 v1.0 不是 100% 向后兼容)的 java 库 (MyLib.jar),我必须使用该插件机制从原始应用程序中使用它。所以我必须以某种方式让同一个 API 的两个(不兼容!)版本一起工作。具体来说,我想在从 MyLib.jar 类调用 API 类时使用 MyAPI v2.0,而在所有其他情况下使用 MyAPI 1.0。
MyAPI 1.0 在类路径中,所以默认使用它,没关系。我可以创建自己的类加载器版本来从 MyAPI 2.0 加载类 - 没问题。但是我如何将它们组合在一起呢?问题:
MyLib.jar 对象从 MyAPI 2.0 实例化了很多(!)类的实例。这是否意味着我必须通过反射来完成所有这些实例化(指定我自己的类加载器)?这真是一个地狱般的工作!
如果某些 MyAPI 2.0 对象被实例化并且它在内部从 MyAPI 实例化另一个对象,它将使用什么类加载器?它会使用我的类加载器还是默认的类加载器?
总的来说,我的方法听起来合理吗?有没有更好的办法?