SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

特集記事

DIをスクリプト言語で実装する

XMLの代わりにスクリプト言語を利用してDIの注入定義を行う

  • このエントリーをはてなブックマークに追加

DI(オブジェクトの依存性注入)の定義を、XMLの代わりにスクリプト言語で行う方法を解説します。手段としては、Java SE 6で採用予定のJSR223仕様を用いた場合と、現J2SE 5.0で実現する場合の2通りを考えます。

  • このエントリーをはてなブックマークに追加

はじめに

 DIコンテナのオブジェクト依存性の注入定義には、XMLベースの設定ファイルを用いることが主流ですが、「ツール無しでは視認性が悪い」「記述が面倒」といった使いにくさから、あまり手軽ではないと感じる時があります。

 そこで、「変更容易な外部ファイルでDIの定義を行う」という前提で、もっと手軽に使える手段としてスクリプト言語を利用する事を考えてみました。

 実装手段として、Java SEの次期バージョンJava SE 6で採用予定のJSR223(Scripting for the Java Platform)仕様を用いた場合と、現J2SE 5.0で実現する場合の2通りを考える事とし、以下のスクリプト言語を採用しました。

  • JavaScript(Java SE 6環境)
  • Groovy(J2SE 5.0環境)
全体構成のイメージ図
全体構成のイメージ図

必要な環境

 もしくは

共通インターフェイス・クラスの作成

 Java SE 6とJ2SE 5.0で共通的に利用するインターフェイスとクラスを作成します。

DI対象となるインターフェイス・クラスの作成

 オブジェクト依存性の注入対象とするインターフェイスとクラスを作成します。

 何らかのサービスを提供するServiceインターフェイス、その実装クラスである複数のService実装クラスを順次実行するMultiServiceクラス、標準出力に文字を出力するPrintServiceを用意します。

Service.java
public interface Service {
    void service();
}
MultiService.java
import java.util.ArrayList;

public class MultiService implements Service {
    private ArrayList<Service> list = new ArrayList<Service>();

    public void addService(Service service) {
        this.list.add(service);
    }

    public void service() {
        for (Service service : this.list) {
            service.service();
        }
    }
}
PrintService.java
public class PrintService implements Service {
    private String name;

    public PrintService(String name) {
        this.name = name;
    }

    public void service() {
        System.out.println(this.name);
    }
}

スクリプト言語側で実装するためのインターフェイス作成

 スクリプト言語側で定義したクラス(もしくはオブジェクト)をJavaのコードから利用するために、Javaで定義したインターフェイスをスクリプト言語側で実装するようにします。

 そのためのインターフェイスとしてTestContainerを用意します。

TestContainer.java
public interface TestContainer {
    Object getComponent(String name);
}

会員登録無料すると、続きをお読みいただけます

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

次のページ
JavaScript(Java SE 6)を用いた実装

この記事は参考になりましたか?

  • このエントリーをはてなブックマークに追加
特集記事連載記事一覧

もっと読む

この記事の著者

和田 好朗(ワダ ヨシアキ)

ITアーキテクト目指して奮闘中。新技術には目が無い技術者。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/386 2006/05/29 12:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング