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

ソース

Source: https://habr.com/ru/post/J56165/


All Articles