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

时间:2015-04-20 13:07:15

标签: java serviceloader

我们说我有一个服务接口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缓存它?

1 个答案:

答案 0 :(得分:2)

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