@TargetSE(valueSE=TYPESE) @RetentionSE(valueSE=RUNTIMESE) @DocumentedSE @InheritedSE public @interface ContextConfiguration
@ContextConfiguration は、統合テスト用に ApplicationContext をロードおよび構成する方法を決定するために使用されるクラスレベルのメタデータを定義します。Spring 3.1 以前は、パスベースのリソースの場所(通常は XML 構成ファイル)のみがサポートされていました。Spring 3.1 以降、コンテキストローダーは、パスベースのリソースまたはクラスベースのリソースのサポートを選択できます。Spring 4.0.4 以降、コンテキストローダーは、パスベースのリソースとクラスベースのリソースを同時にサポートすることを選択できます。@ContextConfiguration を使用して、パスベースのリソースの場所(locations() または value() 属性を介して)またはアノテーション付きクラス(classes() 属性を介して)を宣言できます。ただし、SmartContextLoader のほとんどの実装では、単一のリソース型のみがサポートされることに注意してください。Spring 4.1 以降、パスベースのリソースの場所は、XML 構成ファイルまたは Groovy スクリプトのいずれかになります(Groovy がクラスパス上にある場合)。もちろん、サードパーティのフレームワークは、追加の型のパスベースのリソースをサポートすることを選択できます。
アノテーション付きクラスという用語は、次のいずれかを指す場合があります。
@Configuration アノテーションが付けられたクラス @Component、@Service、@Repository などのアノテーションが付けられたクラスです。)javax.inject アノテーションが付けられた JSR-330 準拠のクラス @Bean -methods を含むその他のクラス アノテーション付きクラスの構成とセマンティクスの詳細については、@Configuration および @Bean の Javadoc を参照してください。
Spring Framework 4.0 以降、このアノテーションをメタアノテーションとして使用して、カスタム合成アノテーションを作成できます。
ContextHierarchy, ActiveProfiles, TestPropertySource, ContextLoader, SmartContextLoader, ContextConfigurationAttributes, MergedContextConfiguration, ApplicationContext| 修飾子と型 | オプションの要素と説明 |
|---|---|
ClassSE<?>[] | classesApplicationContext のロードに使用するアノテーション付きクラス。 |
boolean | inheritInitializers テストスーパークラスのコンテキストイニシャライザーを継承するかどうか。 |
boolean | inheritLocationsresource locations またはテストスーパークラスのアノテーション付きクラスを継承するかどうか。 |
ClassSE<? extends ApplicationContextInitializer<?>>[] | initializersConfigurableApplicationContext の初期化に使用するアプリケーションコンテキスト初期化子クラス。 |
ClassSE<? extends ContextLoader> | loader |
StringSE[] | locationsApplicationContext のロードに使用するリソースの場所。 |
StringSE | name この構成で表されるコンテキスト階層レベルの名前。 |
StringSE[] | valuelocations() のエイリアス。 |
@AliasFor(value="locations") public abstract StringSE[] value
locations() のエイリアス。 この属性は、locations() と組み合わせて使用することはできませんが、locations() の代わりに使用することができます。
inheritLocations()@AliasFor(value="value") public abstract StringSE[] locations
ApplicationContext のロードに使用するリソースの場所。 特に相対パスの場合に、実行時に場所がどのように解釈されるかについての詳細は、AbstractContextLoader.modifyLocations() の Javadoc を確認してください。また、指定されていない場合に使用されるデフォルトの場所の詳細については、AbstractContextLoader.generateDefaultLocations() のドキュメントを参照してください。
前述のデフォルトルールは、locations が設定されている場合に実行時に使用される効果的なデフォルト実装である GenericXmlContextLoader や GenericGroovyXmlContextLoader などの標準 AbstractContextLoader サブクラスにのみ適用されることに注意してください。デフォルトローダーの詳細については、loader() のドキュメントを参照してください。
この属性は、value() と組み合わせて使用することはできませんが、value() の代わりに使用することができます。
inheritLocations()public abstract ClassSE<?>[] classes
ApplicationContext のロードに使用するアノテーション付きクラス。 アノテーション付きクラスが指定されていない場合にデフォルトの構成クラスがどのように検出されるかについて詳しくは、AnnotationConfigContextLoader.detectDefaultConfigurationClasses() の javadoc を確認してください。デフォルトローダーの詳細については、loader() のドキュメントを参照してください。
Configuration, AnnotationConfigContextLoader, inheritLocations()public abstract ClassSE<? extends ApplicationContextInitializer<?>>[] initializers
ConfigurableApplicationContext の初期化に使用するアプリケーションコンテキスト初期化子クラス。 宣言された各イニシャライザーによってサポートされる具体的な ConfigurableApplicationContext 型は、使用中の SmartContextLoader によって作成された ApplicationContext の型と互換性がなければなりません。
SmartContextLoader 実装は通常、Spring の Ordered インターフェースが実装されているかどうか、@Order アノテーションが存在するかどうかを検出し、呼び出す前にインスタンスをソートします。
ApplicationContextInitializer, ConfigurableApplicationContext, inheritInitializers(), loader()public abstract boolean inheritLocations
resource locations またはテストスーパークラスのアノテーション付きクラスを継承するかどうか。 デフォルト値は true です。つまり、アノテーション付きクラスは、テストスーパークラスによって定義されたリソースの場所またはアノテーション付きクラスを継承します。具体的には、特定のテストクラスのリソースロケーションまたはアノテーション付きクラスは、テストスーパークラスによって定義されたリソースロケーションまたはアノテーション付きクラスのリストに追加されます。サブクラスには、リソースの場所またはアノテーション付きクラスのリストを拡張するオプションがあります。
inheritLocations が false に設定されている場合、アノテーション付きクラスのリソースの場所またはアノテーション付きクラスは、スーパークラスによって定義されたリソースの場所またはアノテーション付きクラスをシャドウし、効果的に置き換えます。
パスベースのリソースロケーションを使用する次の例では、ExtendedTest の ApplicationContext が "base-context.xml" および "extended-context.xml" からこの順序でロードされます。"extended-context.xml" で定義された Bean は、"base-context.xml" で定義された Bean をオーバーライドできます。
@ContextConfiguration("base-context.xml")
public class BaseTest {
// ...
}
@ContextConfiguration("extended-context.xml")
public class ExtendedTest extends BaseTest {
// ...
}
同様に、アノテーション付きクラスを使用する次の例では、ExtendedTest の ApplicationContext が、BaseConfig および ExtendedConfig 構成クラスからこの順序でロードされます。ExtendedConfig で定義された Bean は、BaseConfig で定義された Bean をオーバーライドできます。
@ContextConfiguration(classes=BaseConfig.class)
public class BaseTest {
// ...
}
@ContextConfiguration(classes=ExtendedConfig.class)
public class ExtendedTest extends BaseTest {
// ...
}
public abstract boolean inheritInitializers
デフォルト値は true です。つまり、アノテーション付きクラスは、テストスーパークラスによって定義されたアプリケーションコンテキスト初期化子を継承します。具体的には、特定のテストクラスの初期化子は、テストスーパークラスで定義された初期化子のセットに追加されます。サブクラスには初期化子のセットを拡張するオプションがあります。
inheritInitializers が false に設定されている場合、アノテーション付きクラスの初期化子は、スーパークラスによって定義された初期化子をシャドウし、効果的に置き換えます。
次の例では、ExtendedTest の ApplicationContext は、BaseInitializer および ExtendedInitializer を使用して初期化されます。ただし、イニシャライザーが呼び出される順序は、イニシャライザーが Ordered を実装しているか、@Order でアノテーションが付けられているかによって異なることに注意してください。
@ContextConfiguration(initializers = BaseInitializer.class)
public class BaseTest {
// ...
}
@ContextConfiguration(initializers = ExtendedInitializer.class)
public class ExtendedTest extends BaseTest {
// ...
}
public abstract ClassSE<? extends ContextLoader> loader
ApplicationContext のロードに使用する SmartContextLoader(または ContextLoader)の型。 指定しない場合、ローダーは @ContextConfiguration でアノテーションが付けられ、明示的なローダーを指定する最初のスーパークラスから継承されます。階層内のクラスが明示的なローダーを指定していない場合は、代わりにデフォルトのローダーが使用されます。
実行時に選択されるデフォルトの具象実装は、@WebAppConfiguration の有無に応じて DelegatingSmartContextLoader または WebDelegatingSmartContextLoader になります。さまざまな具象 SmartContextLoaders のデフォルトの動作の詳細については、Javadoc で AbstractContextLoader、GenericXmlContextLoader、GenericGroovyXmlContextLoader、AnnotationConfigContextLoader、GenericXmlWebContextLoader、GenericGroovyXmlWebContextLoader、AnnotationConfigWebContextLoader を確認してください。
public abstract StringSE name
指定しない場合、名前は、階層内で宣言されたすべてのコンテキスト内の数値レベルに基づいて推測されます。
この属性は、@ContextHierarchy を使用して構成されたテストクラス階層内で使用される場合にのみ適用できます。この場合、名前は、スーパークラスで定義された階層レベルの同じ名前の構成でこの構成をマージまたはオーバーライドするために使用できます。詳細については、@ContextHierarchy の Javadoc を参照してください。