読者です 読者をやめる 読者になる 読者になる
無料で使えるシステムトレードフレームワーク「Jiji」 をリリースしました!

・OANDA Trade APIを利用した、オープンソースのシステムトレードフレームワークです。
・自分だけの取引アルゴリズムで、誰でも、いますぐ、かんたんに、自動取引を開始できます。

ServiceLoaderでプラグインの仕組みをさくっと作る。

ServiceLoaderを使うと、リソースを使ったプラグインの仕組みをさくっと作成できます。

  1. サービスインターフェイスと実装を作り、
  2. jar内の「META-INF/services/<サービスインターフェイスのクラス名>」にサービス構成ファイルを作成、実装クラスを並べておきます。
  3. 後は、「ServiceLoader.load()」を実行すれば、リソースに書かれた実装クラスのインスタンスが取得可能。

ということで、以下はServiceLoaderを使ってみるサンプルです。

サービスインターフェイス (test/Kitten.java):

package test;
public interface Kitten {
    void meow();
}

サービスの実装x3 (test/Mii.java,test/Shiro.java,test/Tora.java) :

package test;
public class Mii implements Kitten{
    public void meow () {
        System.out.println( "mii : meow!" );
    }
}
package test;
public class Shiro implements Kitten{
    public void meow () {
        System.out.println( "shiro : meow!" );
    }
}
package test;
public class Tora implements Kitten{
    public void meow () {
        System.out.println( "tora : meow!" );
    }
}

サービス構成ファイル (META-INF/services/test.Kitten) :

test.Mii
test.Tora
test.Shiro


サービスを取り出すサンプル。

// 登録されている Kitten の実装を列挙する。
for( Kitten k : ServiceLoader.load( Kitten.class ) ) {
    k.meow();
}

実行結果です。

mii : meow!
tora : meow!
shiro : meow!

昔、DOMパーザーの仕組みを調べつつ自前で実装した記憶がありますが、最近は標準のAPIでサポートされてるんですねー。便利になったものだ。