[Seasar-user:15009] Re: 配列のAutoBinding

Koichi Kobayashi [E-MAIL ADDRESS DELETED]
2008年 7月 12日 (土) 01:00:19 JST


小林 (koichik) です.

Date:    Fri, 11 Jul 2008 20:26:47 +0900
From:    "TAKEUCHI Shinichi / 竹内 伸一" <[E-MAIL ADDRESS DELETED]>
To:      [E-MAIL ADDRESS DELETED]
Subject: [Seasar-user:15006] Re: 配列のAutoBinding

>   配列のDIは注意が必要ですね。コンストラクタで配列の要素に
> 値を入れておいても、S2コンテナにマッチングする要素があると
> 自動的にDIされてしまって値が変わってしまいます。

それは配列に限らず DI 全般でそうなります.

>   現在の仕様と以下のような仕様を切り替えられるようにでき
> ないものでしょうか?

この機能が追加されてから約 2 年経っているので,今から
変更することはないと思います.
その間,この機能があって困ったという声もなかったと
思いますし.

ちなみに,アノテーションで対応できないのでしょうか?
同じ型のプロパティが多数のクラスにあるなら,大抵は
共通のスーパークラスを持っているでしょうから,そこに
アノテーションを指定すれば終わりですよね?

> 現在の仕様でのありがたみが分からない
> ので、実はとっても大事な部分で使われているのかもしれません
> が、、、

<component class="Foo">
  <initMethod name="addBar">
    <var>
      <component class="Bar">
      </component>
    </var>
  </initMethod>
  <initMethod name="addBar">
    <var>
      <component class="Bar">
      </component>
    </var>
  </initMethod>
  <initMethod name="addBar">
    <var>
      <component class="Bar">
      </component>
    </var>
  </initMethod>
  ...
</component>

と書いていたのが

<component class="Foo">
</component>
<component class="Bar">
</component>
<component class="Bar">
</component>
<component class="Bar">
</component>
...

のように書くことができます.
例えば S2Dxo の Jar の中に含まれている
dxo-builtin-converters.dicon はその例で,

http://svn.seasar.org/browse/trunk/seasar2/s2-extension/src/main/resources/dxo-builtin-converters.dicon?revision=2711&root=s2container&view=markup

ここで列挙されているコンポーネントの配列が dxo.dicon に
定義されているコンポーネントのプロパティに DI されます.

AutoRegister と組み合わせても便利でしょう.


-- 
<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 メーリングリストの案内