gpt4 book ai didi

java - 作为库 : How to provide default JCache implementation

转载 作者:太空宇宙 更新时间:2023-11-04 09:23:46 25 4
gpt4 key购买 nike

假设我编写了一个库并希望缓存一些长时间运行或脆弱任务的结果。为此,我使用 JCache我的代码中的 API。

所以我的pom.xml将包含一个依赖项,例如

<dependency>
<groupId>javax.cache</groupId>
<artifactId>cache-api</artifactId>
<version>1.1.1</version>
<scope>provided</scope> <!-- does this even make sense? -->
</dependency>

基于此,我现在想知道如何使用户的使用尽可能简单?

我看到的两个选项都不是最佳的,我感觉这一定是某种常见的“问题”,所以可能有一个我不知道的通用解决方案。

  1. 我自己提供了 JCache API 的实现。

    +:我的图书馆的用户/消费者可以轻松地开箱即用,无需提供任何内容。

    -:如果应使用自定义的、用户特定的实现,则有必要在 Maven 级别从我的库中排除此实现。

    -:多个库之间执行此操作可能会发生冲突。

  2. 我不提供 JCache API 的任何实现。

    +:与其他库或我的库的使用者想要使用的任何自定义实现没有冲突。

    -:有必要提供 JCache 实现,即使消费者不知道涉及缓存。

这看起来非常像日志记录设置,我在其中使用 slf4j-api在我的应用程序中,消费者需要自己提供一个实现。但对我来说,日志记录比缓存更常见。

最佳答案

实际上,您已经很好地列出了不同方法的优缺点。所以我选择你的两种方法并给出一些额外的提示:

  1. I provide an implementation of the JCache API myself.

1.1:您可以使用 Maven Shade 插件将 JCache API 和实现移动到不同的包。那么你们就没有冲突了。它的缺点是当使用(原始)源代码进行调试时会造成困惑。

1.2:您可以保留原始 JCache API 并使用实现的阴影版本。可能与期望一个或“他们的”默认实现的应用程序发生冲突。您可以通过不使用正常的 SPI 机制进行实例化来规避此问题。

  1. I don't provide any implementation the JCache API.

缓存实现在功能和配置方面有很大不同。我建议您至少有一个设置,其实现和配置可以在 OOTB 中运行。要么依赖于实现,要么通过捆绑的阴影实现。

如果您使用 Maven 依赖项,用户可以排除缓存实现并使用自己的缓存实现(如果他们有不同的偏好或要求)。

我建议让事情变得简单并从依赖项开始,然后看看用户可能想要什么或问题出现在哪里。总比从一开始就让事情复杂化要好。

关于java - 作为库 : How to provide default JCache implementation,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58005981/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com