無料で使えるシステムトレードフレームワーク「Jiji」 をリリースしました!

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

アノテーションで名前付け

アノテーションを使用して、サービスインターフェイスと実装を名前付きで関連づけます。

サンプル:

// サービスインターフェイス
static interface Kitten {
    void meow();
}
// サービスの実装。名前+":meow!"を出力する。
static class KittenImpl implements Kitten {
    final String name;
    KittenImpl ( String name ) {
        this.name = name;
    }
    public void meow() {
        System.out.println( name + " : meow!" );
    }
}

// インジェクション先のインスタンス
static class Master {
    // インジェクション先フィールド。
    // @Injectと識別用のアノテーションを設定。
    @Inject @Kuro Kitten kuro;

    Kitten mii;
    // インジェクション先メソッド。
    // @Injectと識別用のアノテーションを引数に設定。
    @Inject
    void setMii( @Mii Kitten mii ) { this.mii = mii; }

    void call() {
        kuro.meow();
        mii.meow();
    }
}

// 識別用のアノテーション
// @BindingAnnotation はGuice組み込みのアノテーションで、
// このアノテーションがインジェクション先の識別用であることを示す。
// 未設定のアノテーションを識別用に使用するとエラーになるので注意。
@Retention( RetentionPolicy.RUNTIME )
@Target( { ElementType.PARAMETER} )
@BindingAnnotation
static @interface Mii {}

@Retention( RetentionPolicy.RUNTIME )
@Target( { ElementType.FIELD} )
@BindingAnnotation
static @interface Kuro {}

// メイン
public static void main( String[] args ) throws Exception {

    Injector injector = Guice.createInjector( new AbstractModule() {
        @Override
        protected void configure ( ) {
            // 識別用アノテーション付けて登録
            bind( Kitten.class ).annotatedWith( Mii.class )
                .toInstance( new KittenImpl("mii") );
            bind( Key.get( Kitten.class, Kuro.class ) ) // Keyを利用してもOK
                .toInstance( new KittenImpl("kuro") );
        }
    });
    injector.getInstance( Master.class ).call();
}

出力:

kuro : meow!
mii : meow!