@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 を含むすべてのクラス ApplicationContext の Spring Bean)として登録することを目的とするその他のクラス。潜在的に Spring アノテーションを使用せずに単一のコンストラクターの自動オートワイヤーを利用します。ApplicationContext に登録されるため、そのような Bean は他の Bean またはテストクラスのインスタンスに注入できます。 コンポーネントクラスの設定とセマンティクスに関する詳細については、@Configuration および @Bean の Javadoc を参照してください。
このアノテーションは、カスタム構成アノテーションを作成するためのメタアノテーションとして使用することができます。
Spring Framework 5.3 以降、このアノテーションはデフォルトでそれを囲むテストクラスから継承されます。詳細については、@NestedTestConfiguration を参照してください。
| 修飾子と型 | オプションの要素と説明 |
|---|---|
ClassSE<?>[] | classesApplicationContext のロードに使用するコンポーネントクラス。 |
boolean | inheritInitializers テストスーパークラスおよびそれを囲むクラスからのコンテキスト初期化子を継承する必要があるかどうか。 |
boolean | inheritLocations テストスーパークラスおよびそれを囲むクラスからのリソースの場所またはコンポーネントクラスを継承する必要があるかどうか。 |
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
デフォルト値は 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 を参照してください。