ファイヤープロジェクト
Singleton(Spring1.2RC2)
2005-05-08T00:00+09:00   matsu
今までのサンプルでも記述してきたが,特に指定しない場合,BeanFactoryが作成するbeanはSingletonとなる.本頁ではSingletonと,そうでない場合の指定方法とその動作を確認する.
本頁のサンプルでは,同一のクラスのbeanをbeans.xmlにて二つ定義する. 一方はsingleton指定,もう一方は非singleton指定である. beans.xmlを以下に示す.
ポイントは以下.
要素beanの属性singleton
該当beanがsingletonの場合はtrue,非singletonの場合はfalse. 指定しない場合はtrueが設定された場合と同様に動作する(すなわちsingleton).
サンプルのドライバクラスHelloBeanFactoryを以下に示す.
BeanFactoryからsingleton,非singletonをそれぞれ二回ずつ取得して(idはそれぞれsingleton-helloid,not-ingleton-helloid),総あたりで同一インスタンスか否かをチェックしている. 実行すると以下のログがでた.
2005-05-07 23:55:23,769 INFO  [main] xml.XmlBeanDefinitionReader:132
  - Loading XML bean definitions from URL
  [jar:file:/home/matsu/programing/java/spring/dicontainer5/springsample.jar
  !/org/fireproject/springsample/beans.xml]
2005-05-07 23:55:23,856 INFO  [main] springsample.HelloBeanFactory:27
  - ====== get HelloBean by singleton-helloid
2005-05-07 23:55:23,861 INFO  [main] support.AbstractBeanFactory:219
  - Creating shared instance of singleton bean 'singleton-helloid'
2005-05-07 23:55:23,862 INFO  [main] support.AbstractBeanFactory:219
  - Creating shared instance of singleton bean 'myBeanFactory'
2005-05-07 23:55:23,985 INFO  [main] springsample.MyBeanFactory:14
  - ===== createHelloBean start
2005-05-07 23:55:23,996 INFO  [main] springsample.MyBeanFactory:14
  - ===== createHelloBean start
2005-05-07 23:55:23,998 INFO  [main] springsample.MyBeanFactory:14
  - ===== createHelloBean start
2005-05-07 23:55:23,999 INFO  [main] springsample.HelloBeanFactory:33
  - org.fireproject.springsample.HelloBean
  [constractDate=1115477723987;factoryName=myBeanFactory1;messge=Hello Bean!!!!;value=1;]
2005-05-07 23:55:24,000 INFO  [main] springsample.HelloBeanFactory:35
  - i = 0 / j = 1 / sameobject? = true
2005-05-07 23:55:24,000 INFO  [main] springsample.HelloBeanFactory:35
  - i = 0 / j = 2 / sameobject? = false
2005-05-07 23:55:24,001 INFO  [main] springsample.HelloBeanFactory:35
  - i = 0 / j = 3 / sameobject? = false
2005-05-07 23:55:24,001 INFO  [main] springsample.HelloBeanFactory:33
  - org.fireproject.springsample.HelloBean
  [constractDate=1115477723987;factoryName=myBeanFactory1;messge=Hello Bean!!!!;value=1;]
2005-05-07 23:55:24,001 INFO  [main] springsample.HelloBeanFactory:35
  - i = 1 / j = 2 / sameobject? = false
2005-05-07 23:55:24,002 INFO  [main] springsample.HelloBeanFactory:35
  - i = 1 / j = 3 / sameobject? = false
2005-05-07 23:55:24,002 INFO  [main] springsample.HelloBeanFactory:33
  - org.fireproject.springsample.HelloBean
  [constractDate=1115477723997;factoryName=myBeanFactory1;messge=Hello Bean!!!!;value=1;]
2005-05-07 23:55:24,002 INFO  [main] springsample.HelloBeanFactory:35
  - i = 2 / j = 3 / sameobject? = false
2005-05-07 23:55:24,003 INFO  [main] springsample.HelloBeanFactory:33
  - org.fireproject.springsample.HelloBean
  [constractDate=1115477723999;factoryName=myBeanFactory1;messge=Hello Bean!!!!;value=1;]
ログから,singletonの場合は一回しかFactoryメソッドが呼ばれないこと,非singletonの場合は毎回Factoryメソッドが呼ばれていることがわかる. さらにsingleton同士は==でtrue,それ以外はfalseとなっていることが分かる.
matsu(C)
Since 2002
Mail to matsu