【ハウツー】

Seasar 2.4リリース! 今更でも恥ずかしくない、始めてみようDIプログラミング

6 DIを活用したプログラミング

後藤大地  [2006/11/17]

インタフェースと実装クラスを用意した。あとはDIコンテナを経由して、用意した実装クラスを、インタフェースベースでプログラミングする。ここで用意したクラスはリスト6.1のとおりだ。

リスト6.1 test.Test - DIを活用したクラス - S2Containerを生成してDIコンテナ経由でインスタンスを取得してプログラミング

package test;

import org.example.message.Printer;

import org.seasar.framework.container.S2Container;
import org.seasar.framework.container.factory.S2ContainerFactory;

public class Test
{
    public static void main(String[] args)
    {
        S2Container container = S2ContainerFactory.create("resources/s2.dicon");
        container.init();

        Printer printer = (Printer)container.getComponent("printer");
        printer.print();
    }
}

まずDIコンテナであるS2Containerのインスタンスを取得する。ここではS2ContainerFactoryを使ってDIコンテナを生成する方法を使っている。リスト6.2のようなコードでいい。設定ファイルであるs2.diconが、Jarファイル内のトップディレクトリにあるresourcesディレクトリ内に配置されているため、指定しているパスはresources/s2.diconだ。クラスパスの通っているディレクトリからの相対パスで指定すればよい。

リスト6.2 S2ContainerFactoryを使ってS2Containerのインスタンスを取得 - 指定する設定ファイルはクラスパスからの相対パスで指定

S2Container container = S2ContainerFactory.create("resources/s2.dicon");
container.init();

次に、取得したS2Containerを経由して(リスト6.3)Printerのインスタンスを生成する。ここでは直接実装クラスを指定してインスタンスを生成していないことに注目されたい。

リスト6.3 取得したS2Containerインスタンスを経由してPrinterインスタンスを取得

Printer printer = (Printer)container.getComponent("printer");

そうしたら、生成したインスタンスをリスト6.4のように実行する。 Messageのインスタンスすら設定していないことに注目されたい。代入できるプロパティはS2Containerによって自動的に代入されるため、あらかじめ用意されているわけだ。

リスト6.4 Printerインスタンスを実行

printer.print();

「S2ContainerFactory.create("resources/s2.dicon");」において指定している設定ファイルはリスト6.5のような内容になっている。ここでprinterと指定された場合はtest.PrinterImplを、messageと指定された場合はtest.MessageImplを使うようになっている。Messageの実装クラスが登録されていることから、printerで取得されるインスタンスには自動的にMessageのインスタンスが設定されているわけである。

リスト6.5 S2Containerの動作設定ファイル - S2ContainerFactoryでS2Containerインスタンスを取得する際に指定する
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.4//EN"
          "http://www.seasar.org/dtd/components24.dtd">

<components>
  <component name="message" class="test.MessageImpl"/>
  <component name="printer" class="test.PrinterImpl"/>
</components>

    新着記事

    特設サイトの情報

    求人情報

    人気記事

    一覧

    イチオシ記事

    新着記事

    特別企画

    一覧

    転職ノウハウ

    あなたの仕事適性診断

    4つの診断で、自分の適性を見つめなおそう!

    Heroes File ~挑戦者たち~

    働くこと・挑戦し続けることへの思いを綴ったインタビュー

    はじめての転職診断

    あなたにピッタリのアドバイスを読むことができます。

    転職Q&A

    転職に必要な情報が収集できます

    スカウト転職する

    企業からアプローチのメッセージが届きます。