dependency-check(Spring1.2)
要素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
<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は設定しているのでエラーなく実行された.

