ファイヤープロジェクト
インスタンスFactoryメソッドを使用するBeanの設定(Spring1.2RC2)
2005-05-07T14:00+09:00   matsu
前頁では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の動作に必要ない).
やはり設定ファイル上からはidがhelloidのbeanのクラスは特定できない点に注意.
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
matsu(C)
Since 2002
Mail to matsu