可以指定可以使用依赖项的 classes/module 吗?

It is possible to specify the classes/module where a dependency can be used?

情况:我面临一个组件,它的旧代码仍在使用 Spring 1.2.6。该组件是关键的,不能更改。这个旧 Spring 版本包含一个 query() 方法,它是 Spring 2.x.x 中的 edited。在我的其余代码中,我想使用更新版本的 Spring(例如 Spring 2.5.6)。

目标:我想说明我这个旧的 query() 方法只能在组件中使用,所以其他代码不受此影响。可以指定可以使用依赖项的 classes/module 吗?

提前致谢!

据我所知,这是不可能的,因为您将库加载到同一个 Class-Loader,所以当对象已经存在时,所有对象都将被重载。

例如,您(或组件)加载 Spring 1.2.6 以便组件可以使用它,而您实际上尝试加载 2.5.6 它会使它过载,这意味着 1.2. 6 get 已卸载,取而代之的是 2.5.6。

解决这个问题的一种方法是在两个 Class-加载器中加载 Spring-版本(参见 this Question)或者当 Spring 支持它时(这是不寻常的,而且可能不是这种情况 - 抱歉,不熟悉 Spring),是不是两个版本都有不同的包。因为它们在不同的包中,所以 Class-Loader 不会重载对象,因为它们有不同的 "Path"(全包 + 对象名称 + .java)。