ファイヤープロジェクト
dependency-check(Spring1.2)
2005-05-31T12:30+09:00   matsu
要素beanの属性dependency-checkは,該当beanで設定可能なプロパティが全て設定されているかどうかをチェックしてくれるようなので,試してみた.
要素beanには属性dependency-checkがある. この値をnone以外に設定すると,該当beanのプロパティがもれなく設定されているかどうかをチェックしてくれる. チェックに引っかかったらErrorとなる. beanによってはデフォルト値を持っていたりするので,これは場合によっては余計な機能である. そこで,dependency-checkはbean毎に指定可能で,さらに以下のような設定のバリエーションがある.
none
チェック無効.
simple
プリミティブ型やコレクションなど,bean以外全てをチェック.
objects(※)
beanをチェック.
all
全てのプロパティをチェック.
※ 2005/05/31時点で,本家ドキュメントでは"object"となっているが,DTDや実際のサンプルによる動作確認によると,"objects"が正しい.
以下に本頁のサンプルのbeans.xmlを示す.
id値topBeanType1のプロパティには以下がある.
  • String型のmsg
  • InnerBean型のinnerBean
サンプルを実行すると,エラーなく終了する. プロパティmsgは設定に記述されており,innerBeaはautowriteによって設定されるから,チェックに引っかからないのである. dependency-checkは,チェックに引っかからないと,動きがよくわからないので,ここから少しずつ壊してエラーログ出力を確認してみる. まず,dependency-check="all"のままプロパティmsgの設定を外す.
  <bean id="topBeanType1"
        class="org.fireproject.springsample.TopBeanType1"
        autowire="byType"
        dependency-check="all">
<!--
        dependency-check="simple">
        dependency-check="objects">
-->
    <!--property name="msg"><value>byTypeMsg</value></property-->
  </bean>
実行すると,以下のようなエラーメッセージが出力される.
...省略...
Unsatisfied dependency expressed through bean property 'msg':
  set this property value or disable dependency checking for this bean
...省略...
次に,dependency-check="simple"としてみる.
  <bean id="topBeanType1"
        class="org.fireproject.springsample.TopBeanType1"
        autowire="byType"
        dependency-check="simple">
<!--
        dependency-check="all">
        dependency-check="objects">
-->
    <!--property name="msg"><value>byTypeMsg</value></property-->
  </bean>
msgが設定されていないので,やはりエラーとなる.
...省略...
Unsatisfied dependency expressed through bean property 'msg':
  set this property value or disable dependency checking for this bean
...省略...
ここからmsg設定を有効にし,autowriteを無効化する.
  <bean id="topBeanType1"
        class="org.fireproject.springsample.TopBeanType1"
        dependency-check="simple">
<!--
        autowire="byType"
        dependency-check="all">
        dependency-check="objects">
-->
    <property name="msg"><value>byTypeMsg</value></property>
  </bean>
dependency-check="simple"だと,beanはチェックされないので,エラーなく終了した. ここで,dependency-check="objects"としみる.
  <bean id="topBeanType1"
        class="org.fireproject.springsample.TopBeanType1"
        dependency-check="objects">
<!--
        autowire="byType"
        dependency-check="all">
        dependency-check="simple">
-->
    <property name="msg"><value>byTypeMsg</value></property>
  </bean>
dependency-check="objects"だとbeanがチェックされ,設定されていないのでエラーとなる.
...省略...
Unsatisfied dependency expressed through bean property 'innerBean':
  set this property value or disable dependency checking for this bean
...省略...
プロパティでbeanを設定して,msgの設定をはずしてみる.
  <bean id="topBeanType1"
        class="org.fireproject.springsample.TopBeanType1"
        dependency-check="objects">
<!--
        autowire="byType"
        dependency-check="all">
        dependency-check="simple">
-->
    <!--property name="msg"><value>byTypeMsg</value></property-->
    <property name="innerBean"><ref bean="innerBean"/></property>
  </bean>
dependency-check="objects"だとmsgはチェックされず,チェックされるbeanは設定しているのでエラーなく実行された.
matsu(C)
Since 2002
Mail to matsu