Springプロパティの依存関係チェック
Springでは、依存関係チェック機能を使用して、必要なプロパティが設定または挿入されていることを確認できます。
依存関係チェックモード
4つの依存関係チェックモードがサポートされています。
-
none –依存関係のチェックはありません。
-
simple-プリミティブ型(int、long、double…)およびコレクション型(map、list ..)のプロパティが設定されていない場合、UnsatisfiedDependencyExceptionがスローされます。
-
オブジェクト–オブジェクトタイプのプロパティが設定されていない場合、UnsatisfiedDependencyExceptionがスローされます。
-
all –いずれかのタイプのプロパティが設定されていない場合、UnsatisfiedDependencyException
がスローされます。
P.S The default mode is none
例
デモンストレーション用のCustomerおよびPersonオブジェクト。
package com.example.common; public class Customer { private Person person; private int type; private String action; //getter and setter methods }
package com.example.common; public class Person { private String name; private String address; private int age; //getter and setter methods }
1. 依存関係チェックなし
「なし」依存関係チェックモードのSpring Bean構成ファイル。
依存関係チェックモードを明示的に定義しなかった場合、デフォルトは「なし」になります。 依存関係チェックは実行されません。
2. 単純な依存関係チェック
「シンプル」依存性チェックモードのSpring Bean構成ファイル。
「type」プロパティ(プリミティブ型またはコレクション型)が設定されていない場合、UnsatisfiedDependencyExceptionがスローされます。
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'CustomerBean' defined in class path resource [config/Spring-Customer.xml]: Unsatisfied dependency expressed through bean property 'type': Set this property value or disable dependency checking for this bean.
3. オブジェクトの依存性チェック
「オブジェクト」依存関係チェックモードのSpring Bean構成ファイル。
「person」プロパティ(オブジェクトタイプ)が設定されていない場合、UnsatisfiedDependencyExceptionがスローされます。
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'CustomerBean' defined in class path resource [config/Spring-Customer.xml]: Unsatisfied dependency expressed through bean property 'person': Set this property value or disable dependency checking for this bean.
4. すべての依存関係チェック
「すべて」の依存性チェックモードを持つSpring Bean構成ファイル。
「シンプル」モードと「オブジェクト」モードの組み合わせ。いずれかのタイプ(プリミティブ、コレクション、オブジェクト)のプロパティが設定されていない場合、UnsatisfiedDependencyExceptionがスローされます。
グローバルなデフォルトの依存関係チェック
面倒でエラーが発生しやすいすべてのBeanの依存関係チェックモードを明示的に定義します。
この構成ファイルで宣言されているすべてのBeanは、デフォルトで「すべて」の依存関係チェックモードになっています。
@Required Annotation
ほとんどのシナリオでは、特定のプロパティが設定されていることを確認する必要がありますが、特定のタイプ(プリミティブ、コレクション、またはオブジェクト)のすべてのプロパティが設定されているわけではありません。 @Required Annotationは、このチェック、see detailを強制できます。