[Seasar-user:6337] Re: [Seaser2] ユーティリティクラスのDI方法について

Koichi Kobayashi [E-MAIL ADDRESS DELETED]
2007年 3月 1日 (木) 02:00:09 JST


小林 (koichik) です.

Date:    Sun, 25 Feb 2007 15:12:52 +0900
From:    "Takuya Aono" <[E-MAIL ADDRESS DELETED]>
To:      [E-MAIL ADDRESS DELETED]
Subject: [Seasar-user:6333] Re: [Seaser2] ユーティリティクラスのDI方法について

> > せめて,SingletonS2ContainerFactory を使用し,個別に
> > コンテナを作成しないようにすべきだと思います.
> 
> おっやるとおりだと思います。
> 勉強不足で、diconでsigleton指定していました。
> 修正しようと思います。

dicon で指定する instance=singleton というのは,
そのコンテナ内でコンポーネントのインスタンスが
一つしか作成されないという意味になります.
SingletonS2Container というのは,一つのコンテナを
扱うためのもので,同じシングルトンという用語を
使っていても単位が違うのでご注意ください.
例えば

public final class Util1 {
  static Strategy strategy = null;
  static{
    S2Container continer = S2ContainerFactory.create( configFilepath );
    strategy = (Strategy)continer.getComponent( parserName );
  }
}

public final class Util2 {
  static Strategy strategy = null;
  static{
    S2Container continer = S2ContainerFactory.create( configFilepath );
    strategy = (Strategy)continer.getComponent( parserName );
  }
}

とあった場合,Util1 と Util2 は個別のコンテナを作成します.
それぞれが同じ定義ファイルを指定していても,コンテナの
インスタンスは 2 つ作成され,その中の instance=singleton
のコンポーネントも個別に作成されます.
ですから,二つのクラスの strategy は別のインスタンスと
なります.

public final class Util1 {
  static Strategy strategy = null;
  static{
    S2Container continer = SingletonS2ContainerFactory.getContainer();
    strategy = (Strategy)continer.getComponent( parserName );
  }
}

public final class Util2 {
  static Strategy strategy = null;
  static{
    S2Container continer = SingletonS2ContainerFactory.getContainer();
    strategy = (Strategy)continer.getComponent( parserName );
  }
}

とした場合は,Util1 と Util2 は同じコンテナを参照します.
ですから,instance=singleton のコンポーネントであれば,
それぞれの strategy は同一のインスタンスとなります.


なお,SingletonS2ContainerFactory を使用する場合は
最初に SingletonS2ContainerFactory#init() を呼び出す
必要があります.


-- 
<component name="koichik">
    <property name="fullName">"Koichi Kobayashi"</property>
    <property name="email">"[E-MAIL ADDRESS DELETED]"</property>
    <property name="blog">"http://d.hatena.ne.jp/koichik"</property>
</component>




Seasar-user メーリングリストの案内