ファイヤープロジェクト
beanへの追加的な情報設定(Spring1.2.1)
2005-06-19T13:00+09:00   matsu
あるインタフェースを実装したbeanには,BeanFactoryによって追加的な情報が設定されるらしいので,試してみた.
前頁のbeanのライフサイクルの記述にて,BeanNameAwareとBeanFactoryAwareが登場した.
  1. BeanNameAwareを実装したbeanは,BeanFactoryによって生成されると,そのsetBeanNameメソッドによって,beanの名前(BeanFactoryに指定されたキー)が設定される. BeanNameAwareのサンプル実装クラスを以下に示す.
    インタフェースBeanNameAwareのメソッドは,setBeanName(String)のみである.
  2. 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の後に呼び出されていることが分かる.
matsu(C)
Since 2002
Mail to matsu