- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
假设我编写了一个库并希望缓存一些长时间运行或脆弱任务的结果。为此,我使用 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>
基于此,我现在想知道如何使用户的使用尽可能简单?
我看到的两个选项都不是最佳的,我感觉这一定是某种常见的“问题”,所以可能有一个我不知道的通用解决方案。
我自己提供了 JCache API 的实现。
+:我的图书馆的用户/消费者可以轻松地开箱即用,无需提供任何内容。
-:如果应使用自定义的、用户特定的实现,则有必要在 Maven 级别从我的库中排除此实现。
-:多个库之间执行此操作可能会发生冲突。
我不提供 JCache API 的任何实现。
+:与其他库或我的库的使用者想要使用的任何自定义实现没有冲突。
-:有必要提供 JCache 实现,即使消费者不知道涉及缓存。
这看起来非常像日志记录设置,我在其中使用 slf4j-api
在我的应用程序中,消费者需要自己提供一个实现。但对我来说,日志记录比缓存更常见。
最佳答案
实际上,您已经很好地列出了不同方法的优缺点。所以我选择你的两种方法并给出一些额外的提示:
- I provide an implementation of the JCache API myself.
1.1:您可以使用 Maven Shade 插件将 JCache API 和实现移动到不同的包。那么你们就没有冲突了。它的缺点是当使用(原始)源代码进行调试时会造成困惑。
1.2:您可以保留原始 JCache API 并使用实现的阴影版本。可能与期望一个或“他们的”默认实现的应用程序发生冲突。您可以通过不使用正常的 SPI 机制进行实例化来规避此问题。
- 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/
我是一名优秀的程序员,十分优秀!