ファイヤープロジェクト
FieldRetrievingFactoryBeanによるフィールドの簡単指定(Spring1.2.1)
2005-07-24T14:50+09:00   matsu
FieldRetrievingFactoryBeanを使用すると,フィールドをより簡単に指定,取得できるらしいので試してみた.
PropertyPathFactoryBeanと同様,FieldRetrievingFactoryBeanはFactoryBeanである. FieldRetrievingFactoryBeanは,staticフィールド,非staticフィールドを指定,取得し,beanとして返したり,beanのプロパティとして設定できる. 指定するフィールドがstaticの場合,以下を指定する.
targetClass
staticフィールドを持つクラス
targetField
staticフィールド名
staticField
targetClassとtargetFieldによる指定を一度に指定する.
targetClassで指定されるクラスのtargetFieldで示される名前のstaticフィールドが指定される. 項目説明からわかるとおり,targetClassとtargetFieldの組合せか,staticFieldのみによって,フィールドを指定する. 以下にstaticフィールドを指定する例を示す.
  <bean id="sampleBeanStaticField"
        class="org.springframework.beans.factory.config.FieldRetrievingFactoryBean">
    <property name="staticField">
      <value>org.fireproject.springsample.SampleBean.STATIC_INSTANCE</value>
    </property>
  </bean>

  <bean id="sampleBeanStaticField2"
        class="org.springframework.beans.factory.config.FieldRetrievingFactoryBean">
    <property name="targetClass">
      <value>org.fireproject.springsample.SampleBean</value>
    </property>
    <property name="targetField">
      <value>STATIC_INSTANCE</value>
    </property>
  </bean>
さらにstaticFieldによる指定を,属性idのみで指定する省略記法もある.
  <bean id="org.fireproject.springsample.SampleBean.STATIC_INSTANCE"
        class="org.springframework.beans.factory.config.FieldRetrievingFactoryBean"/>
非staticフィールドを指定する場合は,以下の二つを設定する.
targetObject
フィールドを持つオブジェクト
targetField
指定するフィールドの名前
上記の設定で,targetObjectがもつtargetFieldで示される名前の非staticフィールドが指定される. 以下に非staticを指定する例を示す.
  <bean id="sampleBean"
        class="org.fireproject.springsample.SampleBean">
    <property name="innerBean">
      <bean id="innerSampleBean"
            class="org.fireproject.springsample.SampleBean"/>
    </property>
  </bean>

  <bean id="sampleBeanNonStaticField"
        class="org.springframework.beans.factory.config.FieldRetrievingFactoryBean">
    <property name="targetObject">
      <ref bean="sampleBean"/>
    </property>
    <property name="targetField">
      <value>innerBean</value>
    </property>
  </bean>
以下に,本頁のサンプルのbeans.xmlを示す.
前節までの例が記述されている. SampleBeanは以下.
サンプルドライバは以下.
実行したみた.
$> java -jar springsample.jar 
...省略...
support.AbstractBeanFactory:219
  - Creating shared instance of singleton bean 'sampleBeanStaticField'
support.AbstractBeanFactory:219
  - Creating shared instance of singleton bean 'sampleBeanStaticField2'
support.AbstractBeanFactory:219
  - Creating shared instance of singleton bean
   'org.fireproject.springsample.SampleBean.STATIC_INSTANCE'
support.AbstractBeanFactory:219
  - Creating shared instance of singleton bean 'sampleBean'
support.AbstractBeanFactory:219
  - Creating shared instance of singleton bean 'sampleBeanNonStaticField'
springsample.HelloApplicationContext:38
  - getBean(sampleBeanStaticField)
springsample.HelloApplicationContext:40
  - SampleBean-STATIC_INSTANCE(1)[innerBean = null]
springsample.HelloApplicationContext:38
  - getBean(sampleBeanStaticField2)
springsample.HelloApplicationContext:40
  - SampleBean-STATIC_INSTANCE(1)[innerBean = null]
springsample.HelloApplicationContext:38
  - getBean(org.fireproject.springsample.SampleBean.STATIC_INSTANCE)
springsample.HelloApplicationContext:40
  - SampleBean-STATIC_INSTANCE(1)[innerBean = null]
springsample.HelloApplicationContext:38
  - getBean(sampleBeanNonStaticField)
springsample.HelloApplicationContext:40
 - SampleBean-innerSampleBean(2)[innerBean = null]
matsu(C)
Since 2002
Mail to matsu