Class AbstractGenericWebContextLoader
- java.lang.Object
- org.springframework.test.context.support.AbstractContextLoader
- org.springframework.test.context.web.AbstractGenericWebContextLoader
- All Implemented Interfaces:
ContextLoader,SmartContextLoader
- Direct Known Subclasses:
AnnotationConfigWebContextLoader,GenericXmlWebContextLoader
public abstract class AbstractGenericWebContextLoader extends AbstractContextLoader
Abstract, generic extension ofAbstractContextLoaderthat loads aGenericWebApplicationContext.If instances of concrete subclasses are invoked via the
SmartContextLoaderSPI, the context will be loaded from theMergedContextConfigurationprovided toloadContext(MergedContextConfiguration). In such cases, aSmartContextLoaderwill decide whether to load the context from locations or annotated classes. Note thatAbstractGenericWebContextLoaderdoes not support theloadContext(String... locations)method from the legacyContextLoaderSPI.Concrete subclasses must provide an appropriate implementation of
loadBeanDefinitions(org.springframework.web.context.support.GenericWebApplicationContext, org.springframework.test.context.web.WebMergedContextConfiguration).- Since:
- 3.2
- Author:
- Sam Brannen, Phillip Webb
- See Also:
loadContext(MergedContextConfiguration),loadContext(String...)
Constructor Summary
Constructors Constructor Description AbstractGenericWebContextLoader()
Method Summary
All Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description protected voidconfigureWebResources(GenericWebApplicationContext context, WebMergedContextConfiguration webMergedConfig)Configures web resources for the supplied web application context (WAC).protected voidcustomizeBeanFactory(DefaultListableBeanFactory beanFactory, WebMergedContextConfiguration webMergedConfig)Customize the internal bean factory of theWebApplicationContextcreated by this context loader.protected voidcustomizeContext(GenericWebApplicationContext context, WebMergedContextConfiguration webMergedConfig)Customize theGenericWebApplicationContextcreated by this context loader after bean definitions have been loaded into the context but before the context is refreshed.protected abstract voidloadBeanDefinitions(GenericWebApplicationContext context, WebMergedContextConfiguration webMergedConfig)Load bean definitions into the suppliedcontextfrom the locations or classes in the suppliedWebMergedContextConfiguration.ApplicationContextloadContext(String... locations)AbstractGenericWebContextLoadershould be used as aSmartContextLoader, not as a legacyContextLoader.ConfigurableApplicationContextloadContext(MergedContextConfiguration mergedConfig)Load a SpringWebApplicationContextfrom the suppliedMergedContextConfiguration.protected voidvalidateMergedContextConfiguration(WebMergedContextConfiguration mergedConfig)Validate the suppliedWebMergedContextConfigurationwith respect to what this context loader supports.Methods inherited from class org.springframework.test.context.support.AbstractContextLoader
customizeContext, generateDefaultLocations, getResourceSuffix, getResourceSuffixes, isGenerateDefaultLocations, modifyLocations, prepareContext, processContextConfiguration, processLocations
Constructor Detail
AbstractGenericWebContextLoader
public AbstractGenericWebContextLoader()
Method Detail
loadContext
public final ConfigurableApplicationContext loadContext(MergedContextConfiguration mergedConfig) throws Exception
Load a SpringWebApplicationContextfrom the suppliedMergedContextConfiguration.Implementation details:
- Calls
validateMergedContextConfiguration(WebMergedContextConfiguration)to allow subclasses to validate the supplied configuration before proceeding. - Creates a
GenericWebApplicationContextinstance. - If the supplied
MergedContextConfigurationreferences a parent configuration, the correspondingApplicationContextwill be retrieved and set as the parent for the context created by this method. - Delegates to
configureWebResources(org.springframework.web.context.support.GenericWebApplicationContext, org.springframework.test.context.web.WebMergedContextConfiguration)to create theMockServletContextand set it in theWebApplicationContext. - Calls
AbstractContextLoader.prepareContext(org.springframework.context.ConfigurableApplicationContext, org.springframework.test.context.MergedContextConfiguration)to allow for customizing the context before bean definitions are loaded. - Calls
customizeBeanFactory(org.springframework.beans.factory.support.DefaultListableBeanFactory, org.springframework.test.context.web.WebMergedContextConfiguration)to allow for customizing the context'sDefaultListableBeanFactory. - Delegates to
loadBeanDefinitions(org.springframework.web.context.support.GenericWebApplicationContext, org.springframework.test.context.web.WebMergedContextConfiguration)to populate the context from the locations or classes in the suppliedMergedContextConfiguration. - Delegates to
AnnotationConfigUtilsfor registering annotation configuration processors. - Calls
customizeContext(org.springframework.web.context.support.GenericWebApplicationContext, org.springframework.test.context.web.WebMergedContextConfiguration)to allow for customizing the context before it is refreshed. Refreshesthe context and registers a JVM shutdown hook for it.
- Parameters:
mergedConfig- the merged context configuration to use to load the application context- Returns:
- a new web application context
- Throws:
Exception- if context loading failed- See Also:
SmartContextLoader.loadContext(MergedContextConfiguration),GenericWebApplicationContext
- Calls
validateMergedContextConfiguration
protected void validateMergedContextConfiguration(WebMergedContextConfiguration mergedConfig)
Validate the suppliedWebMergedContextConfigurationwith respect to what this context loader supports.The default implementation is a no-op but can be overridden by subclasses as appropriate.
- Parameters:
mergedConfig- the merged configuration to validate- Throws:
IllegalStateException- if the supplied configuration is not valid for this context loader- Since:
- 4.0.4
configureWebResources
protected void configureWebResources(GenericWebApplicationContext context, WebMergedContextConfiguration webMergedConfig)
Configures web resources for the supplied web application context (WAC).Implementation Details
If the supplied WAC has no parent or its parent is not a WAC, the supplied WAC will be configured as the Root WAC (see "Root WAC Configuration" below).
Otherwise the context hierarchy of the supplied WAC will be traversed to find the top-most WAC (i.e., the root); and the
ServletContextof the Root WAC will be set as theServletContextfor the supplied WAC.Root WAC Configuration
- The resource base path is retrieved from the supplied
WebMergedContextConfiguration. - A
ResourceLoaderis instantiated for theMockServletContext: if the resource base path is prefixed with "classpath:", aDefaultResourceLoaderwill be used; otherwise, aFileSystemResourceLoaderwill be used. - A
MockServletContextwill be created using the resource base path and resource loader. - The supplied
GenericWebApplicationContextis then stored in theMockServletContextunder theWebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTEkey. - Finally, the
MockServletContextis set in theWebApplicationContext.
- Parameters:
context- the web application context for which to configure the web resourceswebMergedConfig- the merged context configuration to use to load the web application context
- The resource base path is retrieved from the supplied
customizeBeanFactory
protected void customizeBeanFactory(DefaultListableBeanFactory beanFactory, WebMergedContextConfiguration webMergedConfig)
Customize the internal bean factory of theWebApplicationContextcreated by this context loader.The default implementation is empty but can be overridden in subclasses to customize
DefaultListableBeanFactory's standard settings.- Parameters:
beanFactory- the bean factory created by this context loaderwebMergedConfig- the merged context configuration to use to load the web application context- See Also:
loadContext(MergedContextConfiguration),DefaultListableBeanFactory.setAllowBeanDefinitionOverriding(boolean),DefaultListableBeanFactory.setAllowEagerClassLoading(boolean),AbstractAutowireCapableBeanFactory.setAllowCircularReferences(boolean),AbstractAutowireCapableBeanFactory.setAllowRawInjectionDespiteWrapping(boolean)
loadBeanDefinitions
protected abstract void loadBeanDefinitions(GenericWebApplicationContext context, WebMergedContextConfiguration webMergedConfig)
Load bean definitions into the suppliedcontextfrom the locations or classes in the suppliedWebMergedContextConfiguration.Concrete subclasses must provide an appropriate implementation.
- Parameters:
context- the context into which the bean definitions should be loadedwebMergedConfig- the merged context configuration to use to load the web application context- See Also:
loadContext(MergedContextConfiguration)
customizeContext
protected void customizeContext(GenericWebApplicationContext context, WebMergedContextConfiguration webMergedConfig)
Customize theGenericWebApplicationContextcreated by this context loader after bean definitions have been loaded into the context but before the context is refreshed.The default implementation simply delegates to
AbstractContextLoader.customizeContext(ConfigurableApplicationContext, MergedContextConfiguration).- Parameters:
context- the newly created web application contextwebMergedConfig- the merged context configuration to use to load the web application context- See Also:
loadContext(MergedContextConfiguration),AbstractContextLoader.customizeContext(ConfigurableApplicationContext, MergedContextConfiguration)
loadContext
public final ApplicationContext loadContext(String... locations) throws Exception
AbstractGenericWebContextLoadershould be used as aSmartContextLoader, not as a legacyContextLoader. Consequently, this method is not supported.- Parameters:
locations- the resource locations to use to load the application context- Returns:
- a new application context
- Throws:
UnsupportedOperationException- in this implementationException- if context loading failed- See Also:
ContextLoader.loadContext(java.lang.String[])