Spring Framework 入門記 Beanその9 PropertyEditorだよ
「その8」でBeanFactory
のカスタマイズができました.後は,PropertyEditor
の実装クラスを用意すれば,BigDecimal
対応はすぐにでもできそうなので,先にやってしまいます.
まずjava.beans.PropertyEditor
ですが,これまで作ったことがないので随分大変そうだなぁ,とJavaDocを見てため息が出てしまいました.ところが,Springが用意しているFileEditor
のソースを見ると,PropertyEditorSupport
を継承していて,自分で実装しなければならないメソッドは2つだけなんですね.しかもかなり単純.
こんな感じです.
package study; import java.beans.PropertyEditorSupport; import java.math.BigDecimal; public class BigDecimalEditor extends PropertyEditorSupport { public void setAsText(String text) throws IllegalArgumentException { setValue(new BigDecimal(text)); } public String getAsText() { return getValue().toString(); } }
次は,CustomEditorConfigurer
を使用してBeanFactory
に組み込まなくてはなりません.
CustomEditorConfigurer
は,プロパティの型とその型を扱うPropertyEditor
のMap
をsetCustomEditors(Map)
メソッドで設定してあげればいいようです.
ということで,BeanFactory
カスタマイズ用定義ファイルに次を追加!
<bean id="customEditorConfigurer" class="org.springframework.beans.factory.config.CustomEditorConfigurer" > <property name="customEditors"> <map> <entry key="java.math.BigDecimal"> <bean class="study.BigDecimalEditor"/> </entry> </map> </property> </bean>
今度は<map>
要素を使ってしまいました.新しいPropertyEditor
を作ったら,<entry>
要素を追加してあげればいいわけですね.
次にBigDecimal
型のプロパティを持つBeanを作成します(ソースは省略).
Beanの定義ファイルをこんな感じにして...
<bean name="foo" class="study.Foo"> <property name="number"><value>100.00</value></property> </bean>
実行すると,しっかりプロパティに値を設定することができました.
BigDecimalEditor
のコードを見ると,BigDecimal
に特化しないで,String
の引数を1つだけ持つコンストラクタがあり,toString()
で文字列化できるクラスなら何でもオッケーってした方が良さそうですね.