java - 为什么ServiceLoader总是重新实例化服务?

标签 java serviceloader

假设我有一个服务接口(interface)com.example.Service

为了进行测试,我定义了一个

src/test/resources/META-INF/services/com.example.Service

文件包含

com.example.sometest.MockServiceImpl

MockServiceImpl 实现该接口(interface)。

现在,当执行 ServiceLoader.load(Service.class) 并迭代结果时,我的 MockServiceImpl 总是会再次实例化。 ServiceLoader 的 javadoc 声明它确实维护缓存,但我的模拟服务似乎没有被缓存。

为什么会这样,如何让 ServiceLoader 缓存它?

最佳答案

我认为 API 意味着缓存是针对每个 ServiceLoader 实例的:“迭代器方法的每次调用都会返回一个迭代器,该迭代器首先生成缓存的所有元素...”。

关于java - 为什么ServiceLoader总是重新实例化服务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29748768/

相关文章:

java - 什么是 ServiceLoader 以及如何使用它?

Java 9 ServiceLoader 运行时模块加载和替换

java - 如何判断Java代码的效率

java - 使用 JPA 存储 Map<String,String>

osgi - 在OSGI/Eclipse中使用Log4j2.10和slf4j-api 1.8

java - 无法派生模块描述符 : Provider {class X} not in module

java.util.ServiceLoader 没有加载我的提供者类

java - 如何禁用速度日志

java - 如何引用对象本身的方法

java - ANTLR4 - 使用 Visitor 将语法树转换为 AST