Java-util-serviceloader-load-loader

提供:Dev Guides
移動先:案内検索

Java.util.ServiceLoader.load()メソッド

説明

  • java.util.ServiceLoader.load(Class <S> service、ClassLoader loader)*メソッド指定されたサービスタイプおよびクラスローダーの新しいサービスローダーを作成します。

宣言

以下は* java.util.ServiceLoader.load()*メソッドの宣言です

public static <S> ServiceLoader<S> load(Class<S> service,ClassLoader loader)

パラメーター

  • service -サービスを表すインターフェースまたは抽象クラス
  • loader -プロバイダー構成ファイルとプロバイダークラスの読み込みに使用するクラスローダー、またはシステムクラスローダー(または、失敗した場合はブートストラップクラスローダー)を使用する場合は null

戻り値

このメソッドは新しいサービスローダーを返します

例外

NA

サービスを登録するには、クラスパスにMETA-INF/serviceフォルダーが必要です。 この特定のフォルダーには、実装の具体的なクラス名をリストした1行を含む、実装するインターフェイスの名前を含むテキストファイルが必要です。 私たちの場合、ファイルの名前は com.finddevguides.ServiceProvider であり、この行が含まれています-

com.finddevguides.ServiceImplementation

私たちのサービスコードは次のとおりです-

package com.finddevguides;

public class ServiceImplementation extends ServiceProvider {
   public String getMessage() {
      return "Hello World";
   }
}

次のコードは、登録されているサービスをロードし、それを使用してサービスからメッセージを取得します-

package com.finddevguides;

import java.util.ServiceLoader;

public abstract class ServiceProvider {

   public static ServiceProvider getDefault() {

     //load our plugin with the default system class loader
      ServiceLoader<ServiceProvider> serviceLoader =
         ServiceLoader.load(ServiceProvider.class,
      ClassLoader.getSystemClassLoader());

     //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