java.util.ServiceLoader.load()方法实例
java.util.ServiceLoader.load(Class<S> service) 方法创建一个新的服务加载器的给定服务类型,使用当前线程的上下文类加载器。
声明
以下是java.util.ServiceLoader.load()方法的声明
public static <S> ServiceLoader<S> load(Class<S> service)
参数
-
service -- 在接口或抽象类表示服务
返回值
此方法返回一个新的服务加载器
异常
-
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.ServiceLoader; public abstract class ServiceProvider { public static ServiceProvider getDefault() { // load our plugin ServiceLoader<ServiceProvider> serviceLoader = ServiceLoader.load(ServiceProvider.class); //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()); } }
让我们来编译和运行上面的程序,这将产生以下结果:
Hello World