そして、どういうわけか、 Java 1.6 Mustangのリリースは、私にはまったく気付かれずに通過しました。 この記事ではすべての「グッズ」については説明しませんが、ServiceLoaderについてのみ説明します。
ServiceLoaderを使用する最も簡単な例は、モジュラーアプリケーションの開発です。 このクラスの存在について知らなかった場合は、Eclipse RPCやNetBeans RPCなど、何らかの種類のRCPを使用する可能性が高いでしょう。 しかし、多くの場合、プラグインを使用する可能性を固定したいアプリケーションが既に書かれています。 そして、私はそれを「過剰な血」なしで、簡単に、優雅にやりたい。
モジュラーハローワールド。
問題の声明
そのため、モジュラー「Hello World」を実行します。 メインプログラムを使用してコンソールに表示される行を提供するのは、モジュールの責任です。
モジュールAPI
モジュールのAPIを使用してjarファイルを作成し、次の内容を持つ1つのファイルdemo.HelloWorldInterface.javaをその中に入れます。
package demo;
public interface HelloWorldInterface {
public String getMessage();
}
* This source code was highlighted with Source Code Highlighter .
メインプログラムで使用され、プラグインで実装するインターフェースについて説明しました。
プラグイン
APIの実装を使用してjarファイルを作成し、最初にファイルdemo.HelloWorldImpl.javaを次のコンテンツとともに配置します。
package demo;
public class HelloWorldImpl implements HelloWorldInterface {
public String getMessage() {
return "Hello World" ;
}
}
* This source code was highlighted with Source Code Highlighter .
そして、1行のみを含むMETA-INF / servicesディレクトリにdemo.HelloWorldInterfaceファイルを配置します
demo.HelloWorldImpl
主なプログラム
そして今、私たちはメインプログラムを実装しています。 mainメソッドを含むdemo.Mainクラスのコードは次のようになります
package demo;
import java.util.ServiceLoader;
public class Main {
public static void main( String [] args) {
for (HelloWorldInterface hw : ServiceLoader.load(HelloWorldInterface. class )) {
System. out .println(hw.getMessage());
}
}
}
* This source code was highlighted with Source Code Highlighter .
打ち上げ
ここで、2つの事前に準備されたjarを示すクラスパスでMainクラスを実行します。 出来上がり。 モジュラーアプリケーションの準備ができました。 すべての魔法はServiceLoader.load()メソッドにあり、呼び出されると、META-INF / servicesディレクトリ内のすべてのロードされたjarで、転送されたインターフェースの名前(この場合はdemo.HelloWorldInterface)を持つファイルを検索し、クラスの名前がそれらから読み取られますこのインターフェイスを実装します。 その後、これらのクラスのインスタンスが作成され、このメソッドによって返されます。