假设我有一个服务接口com.example.Service
。
为了测试,我定义了
src/test/resources/META-INF/services/com.example.Service
包含的文件
com.example.sometest.MockServiceImpl
MockServiceImpl
实现接口。现在,当执行
ServiceLoader.load(Service.class)
并遍历结果时,总是再次实例化我的MockServiceImpl
。 ServiceLoader
的javadoc声明它确实维护了缓存,但是我的模拟服务似乎没有被缓存。为什么会这样,如何获取
ServiceLoader
进行缓存? 最佳答案
我认为API意味着缓存是按ServiceLoader实例进行的:“每次调用迭代器方法都会返回一个迭代器,该迭代器首先会产生缓存的所有元素……”。