Spring Framework 入門記 Beanその11 XmlBeanFactory

本来なら次は「3.7. Lifecycle of a bean in the BeanFactory」のはずだったのですが,つい最近になって

This chapter will be re-written soon.

となってしまいました.(^^;
RC2のドキュメントには状態遷移図付きの解説があったのですが,それほどの内容ではないので飛ばしましょう.
ということで次は「3.8. BeanFactory structure and implementations (WIP)」.ここを読めばBeanFactoryの階層化について理解できるのかな,と思いきや,

From here on, up till the Context stuff, needs an overhaul.

とか書いてあるし...(^^; ま,開発中なんだからこんなものですよね.っていうか,これだけドキュメントがあるって異常なくらいです.「全体の繁栄のために」ドキュメントを書いてくださったSpring Frameworkのスタッフに感謝です.おかげさまで最高の日記ネタにしています.
現状で書いてあることは,いつも使っているコンテナXmlBeanFacotryを構成するためのXMLについて,ここまで説明がなかった<props><list><map>を含めて解説されています.でも<set>は書いてありません.なぜ? それに,<props><map>はもう使っちゃったんだよなぁ.
Beanのプロパティに他のBeanの参照を設定したりするための<ref>要素の説明では,bean属性およびlocal属性の他にexternal属性を指定できると書かれています.しかし,DTDではそのような属性は宣言されていません.説明には,参照しようとしているXML(BeanFactory)ではなく,外部からBeanを探すことを明示するそうです.必要なのかなぁ?
このまま終わるのも何なので,とりあえず<list>要素だけでも使ってみましょう.
まずはjava.util.Listのプロパティを持つクラスを用意します(ソースは省略).
そして定義ファイルを作成します(<bean>要素のみ抜粋).

    <bean id="foo" class="study.Foo" singleton="false">
        <property name="list">
            <list>
                <value>Yuri</value>
                <value>Yuu</value>
                <value>Moe</value>
                <value>Izumi</value>
            </list>
        </property>
    </bean>

<list>要素の内容には,<value>要素だけでなく,<ref>要素などはもちろん,<props><list><map>を記述することもできます.リストのリストとか作れるわけですね.
これを以前より使用しているMainクラス(「入門記 Bean その8」の終わりの方参照)で実行すると,

 - Loading XML bean definitions from (no description)
 foo : study.Foo@12940b3
     list=[Yuri, Yuu, Moe, Izumi]
     class=class study.Foo

となりました.バッチリです.
なお,Listの実装クラスはjava.util.ArrayListでした.これはカスタマイズできないのかな? DTDには属性などはありませんから,現状ではどうしようもなさそうです.ちなみにMapの実装クラスはjava.util.HashMapです.
どうやら,Spring FrameworkのBeansパッケージの基本的なところはだいたいクリアできたようで,次の「3.9. Introduction to the ApplicationContext」からはContextパッケージになるようです.順調,順調.このドキュメントの目次を見るとまだまだ先は長いのですけどね... でも,日記のために頑張るのだぁ.