java.util.ServiceLoader.iterator()%uA0方法懒加载这个加载器的服务提供商。此方法返回的迭代器首先得到所有提供者缓存的元素,在实例化顺序。然后,懒加载和实例化任何剩余的提供者,添加每一个依次缓存。
声明
以下是java.util.ServiceLoader.iterator()方法的声明
public Iterator<S> iterator()
参数
-
NA
返回值
此方法返回一个迭代器,懒惰加载提供程序此装载机的服务
异常
-
NA
例子
为了要注册的服务,我们需要在我们的类路径中META-INF/service文件夹。在这个特殊的文件夹,我们需要与我们实现包含单个行列出执行的具体类名的接口的名称的文本文件。在我们的例子中的文件的名称是com.yiibai.ServiceProvider和包含这一行:
com.yiibai.ServiceImplementation
我们的服务代码如下:
package com.yiibai public class ServiceImplementation extends ServiceProvider { public String getMessage() { return "Hello World" } }
下面的代码加载是注册并使用它来从服务得到消息的服务:
package com.yiibai import java.util.Iterator import java.util.ServiceLoader public abstract class ServiceProvider { public static ServiceProvider getDefault() { // load our plugin ServiceLoader<ServiceProvider> serviceLoader = ServiceLoader.load(ServiceProvider.class) // load the available providers of this loader&aposs service. Iterator<ServiceProvider> iterator = serviceLoader.iterator() // check if there is a provider System.out.println("Iterator has more provider:" + iterator.hasNext()) // use the provider to get the message System.out.println("" + iterator.next().getMessage()) // checking if load was successful for (ServiceProvider provider : serviceLoader) { return provider } throw new Error("Something is wrong with registering the addon") } public abstract String getMessage() public static void main(String[] ignored) { // create a new provider and call getMessage() ServiceProvider provider = ServiceProvider.getDefault() System.out.println(provider.getMessage()) } }
让我们来编译和运行上面的程序,这将产生以下结果:
Iterator has more providers:true Hello World Hello World