使用 Spring 而不向客户端应用程序公开依赖项

Nic*_*k N 5 java spring osgi

我正在为多个客户端编写 Java API,并且在内部希望使用 Spring 及其多个功能,但我不想向客户端公开我的依赖项。

这可能吗?

因此,如果我的客户使用不同版本的 spring,它们将与我的内部 Spring 依赖项隔离。

如果是这样,我的 spring 依赖项是否会捆绑在我的 jar 内部?我的客户端应用程序是否需要自定义类加载器?

我听说你可以通过 OSGI 捆绑包使用它,但我想知道这是否能满足我的要求。

我的 API 的客户端不会启用 OSGI,或者我们当前没有使用 OSGI 包的环境。

Rob*_*bin 1

这样做实际上并不可行,也不可取。为什么要“隐藏”依赖项?您是否还想隐藏对您可能使用的任何日志记录包的依赖(例如)?

如果您的实现中有依赖项,那么最好将它们发布,因为这会减少 API 用户的痛苦,因为他们在尝试使用您的代码之前就知道可能存在哪些冲突。

不要忘记,您的用户实际上是开发人员,我确信他们宁愿预先了解任何地雷或要求。

编辑 - 关于 OSGi:

OSGi 肯定会解决您冲突的依赖关系问题,但它也依赖于在 OSGi 环境中进行部署,而您没有提到您的客户端就是这种情况。此外,仍然不建议在捆绑包中“隐藏”这些依赖项。OSGi 的本质允许那些相互冲突的依赖项在同一个应用程序中共存。