Class AbstractDelegatingSmartContextLoader
- All Implemented Interfaces:
- AotContextLoader,- ContextLoader,- SmartContextLoader
- Direct Known Subclasses:
- DelegatingSmartContextLoader,- WebDelegatingSmartContextLoader
AbstractDelegatingSmartContextLoader serves as an abstract base class
 for implementations of the SmartContextLoader SPI that delegate to a
 set of candidate SmartContextLoaders (i.e., one that supports XML
 configuration files or Groovy scripts and one that supports annotated classes)
 to determine which context loader is appropriate for a given test class's
 configuration. Each candidate is given a chance to
 process the
 ContextConfigurationAttributes for each class in the test class hierarchy
 and enclosing class hierarchy that is annotated with
 @ContextConfiguration, and the candidate that
 supports the merged, processed configuration will be used to actually
 load the context.
 Any reference to an XML-based loader can be interpreted to mean a context loader that supports only XML configuration files or one that supports both XML configuration files and Groovy scripts simultaneously.
Placing an empty @ContextConfiguration annotation on a test class signals
 that default resource locations (e.g., XML configuration files or Groovy scripts)
 or default
 configuration classes
 should be detected. Furthermore, if a specific ContextLoader or
 SmartContextLoader is not explicitly declared via
 @ContextConfiguration, a concrete subclass of
 AbstractDelegatingSmartContextLoader will be used as the default loader,
 thus providing automatic support for either path-based resource locations
 (e.g., XML configuration files and Groovy scripts) or annotated classes,
 but not both simultaneously.
 
A test class may optionally declare neither path-based resource locations nor annotated classes and instead declare only application context initializers. In such cases, an attempt will still be made to detect defaults, but their absence will not result in an exception.
As of Spring Framework 6.0, this class implements AotContextLoader.
 Consequently, the candidate getXmlLoader() and
 getAnnotationConfigLoader() must also implement AotContextLoader
 in order to provide AOT support.
- Since:
- 3.2
- Author:
- Sam Brannen, Phillip Webb
- See Also:
- 
Constructor SummaryConstructors
- 
Method SummaryModifier and TypeMethodDescriptionprotected abstract SmartContextLoaderGet the delegateSmartContextLoaderthat supports annotated classes.protected abstract SmartContextLoaderGet the delegateSmartContextLoaderthat supports XML configuration files and/or Groovy scripts.final ApplicationContextloadContext(MergedContextConfiguration mergedConfig) Delegates to an appropriate candidateSmartContextLoaderto load anApplicationContext.final ApplicationContextloadContextForAotProcessing(MergedContextConfiguration mergedConfig) Delegates to an appropriate candidateSmartContextLoaderto load anApplicationContextfor AOT processing.final ApplicationContextloadContextForAotRuntime(MergedContextConfiguration mergedConfig, ApplicationContextInitializer<ConfigurableApplicationContext> initializer) Delegates to an appropriate candidateSmartContextLoaderto load anApplicationContextfor AOT run-time execution.voidprocessContextConfiguration(ContextConfigurationAttributes configAttributes) Delegates to candidateSmartContextLoadersto process the suppliedContextConfigurationAttributes.Methods inherited from class java.lang.Objectclone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface org.springframework.test.context.SmartContextLoaderloadContext, processLocations
- 
Constructor Details- 
AbstractDelegatingSmartContextLoaderpublic AbstractDelegatingSmartContextLoader()
 
- 
- 
Method Details- 
getXmlLoaderGet the delegateSmartContextLoaderthat supports XML configuration files and/or Groovy scripts.
- 
getAnnotationConfigLoaderGet the delegateSmartContextLoaderthat supports annotated classes.
- 
processContextConfigurationDelegates to candidateSmartContextLoadersto process the suppliedContextConfigurationAttributes.Delegation is based on explicit knowledge of the implementations of the default loaders for XML configuration files and Groovy scripts and annotated classes. Specifically, the delegation algorithm is as follows: - If the resource locations or annotated classes in the supplied
 ContextConfigurationAttributesare not empty, the appropriate candidate loader will be allowed to process the configuration as is, without any checks for detection of defaults.
- Otherwise, the XML-based loader will be allowed to process
 the configuration in order to detect default resource locations. If
 the XML-based loader detects default resource locations,
 an infomessage will be logged.
- Subsequently, the annotation-based loader will be allowed to
 process the configuration in order to detect default configuration classes.
 If the annotation-based loader detects default configuration
 classes, an infomessage will be logged.
 - Specified by:
- processContextConfigurationin interface- SmartContextLoader
- Parameters:
- configAttributes- the context configuration attributes to process
- Throws:
- IllegalArgumentException- if the supplied configuration attributes are- null, or if the supplied configuration attributes include both resource locations and annotated classes
- IllegalStateException- if the XML-based loader detects default configuration classes; if the annotation-based loader detects default resource locations; if neither candidate loader detects defaults for the supplied context configuration; or if both candidate loaders detect defaults for the supplied context configuration
 
- If the resource locations or annotated classes in the supplied
 
- 
loadContextpublic final ApplicationContext loadContext(MergedContextConfiguration mergedConfig) throws Exception Delegates to an appropriate candidateSmartContextLoaderto load anApplicationContext.Delegation is based on explicit knowledge of the implementations of the default loaders for XML configuration files and Groovy scripts and annotated classes. Specifically, the delegation algorithm is as follows: - If the resource locations in the supplied MergedContextConfigurationare not empty and the annotated classes are empty, the XML-based loader will load theApplicationContext.
- If the annotated classes in the supplied MergedContextConfigurationare not empty and the resource locations are empty, the annotation-based loader will load theApplicationContext.
 - Specified by:
- loadContextin interface- SmartContextLoader
- Parameters:
- mergedConfig- the merged context configuration to use to load the application context
- Returns:
- a new application context
- Throws:
- IllegalStateException- if neither candidate loader is capable of loading an- ApplicationContextfrom the supplied merged context configuration
- ContextLoadException- if context loading failed
- Exception
- See Also:
 
- If the resource locations in the supplied 
- 
loadContextForAotProcessingpublic final ApplicationContext loadContextForAotProcessing(MergedContextConfiguration mergedConfig) throws Exception Delegates to an appropriate candidateSmartContextLoaderto load anApplicationContextfor AOT processing.Delegation is based on explicit knowledge of the implementations of the default loaders. See loadContext(MergedContextConfiguration)for details.- Specified by:
- loadContextForAotProcessingin interface- AotContextLoader
- Parameters:
- mergedConfig- the merged context configuration to use to load the application context
- Returns:
- a new application context
- Throws:
- IllegalArgumentException- if the supplied merged configuration is- null
- IllegalStateException- if neither candidate loader is capable of loading an- ApplicationContextfrom the supplied merged context configuration
- ContextLoadException- if context loading failed
- Exception
- Since:
- 6.0
- See Also:
 
- 
loadContextForAotRuntimepublic final ApplicationContext loadContextForAotRuntime(MergedContextConfiguration mergedConfig, ApplicationContextInitializer<ConfigurableApplicationContext> initializer) throws Exception Delegates to an appropriate candidateSmartContextLoaderto load anApplicationContextfor AOT run-time execution.Delegation is based on explicit knowledge of the implementations of the default loaders. See loadContext(MergedContextConfiguration)for details.- Specified by:
- loadContextForAotRuntimein interface- AotContextLoader
- Parameters:
- mergedConfig- the merged context configuration to use to load the application context
- initializer- the- ApplicationContextInitializerthat should be applied to the context in order to recreate bean definitions
- Returns:
- a new application context
- Throws:
- IllegalStateException- if neither candidate loader is capable of loading an- ApplicationContextfrom the supplied merged context configuration
- ContextLoadException- if context loading failed
- Exception
- Since:
- 6.0
- See Also:
 
 
-