Java 6. ServiceLoaderを使用してモジュラーアプリケーションを構築する

私が最近怠けているもの。 Javaのすべての更新を追跡するために使用されます。 かつて、Java 1.5 Tiger Iは「内臓を食べた」だけでしたが、残念ながら、すべてがすでに忘れられていました。



そして、どういうわけか、 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)を持つファイルを検索し、クラスの名前がそれらから読み取られますこのインターフェイスを実装します。 その後、これらのクラスのインスタンスが作成され、このメソッドによって返されます。



ソース



All Articles