beanへの追加的な情報設定(Spring1.2.1)
あるインタフェースを実装したbeanには,BeanFactoryによって追加的な情報が設定されるらしいので,試してみた.
前頁のbeanのライフサイクルの記述にて,BeanNameAwareとBeanFactoryAwareが登場した.
- BeanNameAwareを実装したbeanは,BeanFactoryによって生成されると,そのsetBeanNameメソッドによって,beanの名前(BeanFactoryに指定されたキー)が設定される.
BeanNameAwareのサンプル実装クラスを以下に示す.
インタフェースBeanNameAwareのメソッドは,setBeanName(String)のみである. - BeanFactoryAwareを実装したbeanは,BeanFactoryに生成されると,そのsetBeanFactoryメソッドによって,そのbeanを作成したBeanFactoryが設定される.
前頁に記述した通り,beanがBeanNameAwareとBeanFactoryAwareの両方を実装しっている場合は,setBeanNameのあとsetBeanFactoryが呼ばれる.
BeanFactoryAwareのサンプル実装クラスを以下に示す.
インタフェースBeanFactoryのメソッドは,setBeanFactory(BeanFactory)のみである. このサンプルでは設定されたBeanFactoryを検証するために,checkBeanFactoryメソッドを追加した. さらに設定されたBeanFactoryを使用するメソッドとして,getNamedSampleBeanを追加した.
前節のサンプルbeanを使用するサンプルのbeans.xmlを示す.
このように,BeanNamedAware,BeanFactoryAwareを使用するために必要な設定はない.
次にサンプルのドライバを以下に示す.
サンプルの実行結果を以下に示す.
...省略...
support.AbstractBeanFactory:219
- Creating shared instance of singleton bean 'awareSampleBean'
springsample.AwareSampleBean:19
- constructor of AwareSampleBean.
springsample.AwareSampleBean:23
- setValue.
springsample.AwareSampleBean:38
- setBeanFactory
springsample.HelloBeanFactory:31
- checkBeanFactory = true
springsample.AwareSampleBean:58
- getNamedSampleBean.
support.AbstractBeanFactory:219
- Creating shared instance of singleton bean 'namedSampleBean'
springsample.NamedSampleBean:17
- constructor of NamedSampleBean.
springsample.NamedSampleBean:21
- setValue.
springsample.NamedSampleBean:34
- setBeanName.
springsample.HelloBeanFactory:38
- namedSampleBean1 == namedSampleBean2 ? : true
setBeanFactoryメソッドや,setBeanNameメソッドがsetValueの後に呼び出されていることが分かる.

