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