假设我有一个服务接口(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/