インスタンスFactoryメソッドを使用するBeanの設定(Spring1.2RC2)
前頁ではBeanFactoryはstaticなFacotryメソッド経由でbeanをインスタンス化した.次にBeanFactoryがFactoryクラスをインスタンス化し,そのインスタンス化されたFactoryオブジェクトのインスタンスFactoryメソッドからbeanをインスタンス化するように設定してみる.
前頁でBeanFactoryが生成するクラスはbeanに限らないことを記述した.
そしてFactoryクラスからbeanを生成できることも確認した.
このときFactoryクラスはインスタンス化せず,staticなFactoryメソッドを使用した.
本頁のサンプルでは,Factoryクラスを要素beanで指定し,BeanFactoryで生成する.
これは通常のbeanと全く同様の作業である.
そしてインスタンス化されたFactoryオブジェクトのインスタンスFactoryメソッドを使用してbeanを作成する.
サンプルの設定ファイルを以下にしめす.
ポイントを以下に示す.
- Factoryクラスをbeanとして定義
- 通常のbeanと同様に定義する.
- 属性factory-bean
- idがhelloidのbeanでは,factory-beanとして上記Factoryクラスのbeanのidを指定する.
- 属性facotry-method
- 続けてインスタンスFactoryメソッドを指定する.
- 属性class
- idがhelloidのbeanでは,属性factory-beanを指定したので,属性classは指定しない(Springの動作に必要ない).
Factoryクラスはやはりorg.fireproject.springsample.MyBeanFactoryである.
今回はFactoryメソッドはインスタンスメソッドである.
public HelloBean createHelloBean() {
logger.info("===== createHelloBean start");
return new HelloBean(Calendar.getInstance().getTime(), name);
}
サンプルのドライバクラスHelloBeanFactoryは前頁と同じである.
また,beanクラスもコンストラクタに引数を一つ追加しただけで,大した変更はない.
実行すると以下のログがでた.
2005-05-07 13:58:27,064 INFO [main] xml.XmlBeanDefinitionReader:132 - Loading XML bean definitions from URL [jar:file:/home/matsu/programing/java/spring/dicontainer3/springsample.jar !/org/fireproject/springsample/beans.xml] 2005-05-07 13:58:27,148 INFO [main] springsample.HelloBeanFactory:32 - ====== get HelloBean by id 2005-05-07 13:58:27,153 INFO [main] support.AbstractBeanFactory:219 - Creating shared instance of singleton bean 'helloid' 2005-05-07 13:58:27,153 INFO [main] support.AbstractBeanFactory:219 - Creating shared instance of singleton bean 'myBeanFactory' 2005-05-07 13:58:27,275 INFO [main] springsample.MyBeanFactory:14 - ===== createHelloBean start 2005-05-07 13:58:27,288 INFO [main] springsample.HelloBeanFactory:34 - org.fireproject.springsample.HelloBean [constractDate=1115441907276;factoryName=myBeanFactory1;messge=Hello Bean!!!!;value=1;] 2005-05-07 13:58:27,289 INFO [main] springsample.HelloBeanFactory:40 - ====== get HelloBean by name 2005-05-07 13:58:27,289 INFO [main] springsample.HelloBeanFactory:42 - org.fireproject.springsample.HelloBean [constractDate=1115441907276;factoryName=myBeanFactory1;messge=Hello Bean!!!!!!!!!;value=10;] 2005-05-07 13:58:27,289 INFO [main] springsample.HelloBeanFactory:45 - helloBeanById == helloBeanByName ? true

