Class AbstractGenericWebContextLoader
- All Implemented Interfaces:
AotContextLoader
,ContextLoader
,SmartContextLoader
- Direct Known Subclasses:
AnnotationConfigWebContextLoader
,GenericXmlWebContextLoader
AbstractContextLoader
that loads a
GenericWebApplicationContext
.
If instances of concrete subclasses are invoked via the
SmartContextLoader
SPI, the context will be loaded from the MergedContextConfiguration
provided to loadContext(MergedContextConfiguration)
. In such cases, a
SmartContextLoader
will decide whether to load the context from
locations or annotated classes. Note that
AbstractGenericWebContextLoader
does not support the
loadContext(String... locations)
method from the legacy
ContextLoader
SPI.
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:
-
Field Summary
-
Constructor Summary
-
Method Summary
Modifier and TypeMethodDescriptionprotected void
configureWebResources
(GenericWebApplicationContext context, WebMergedContextConfiguration webMergedConfig) Configures web resources for the supplied web application context (WAC).protected GenericWebApplicationContext
Factory method for creating theGenericWebApplicationContext
used by thisContextLoader
.protected void
customizeBeanFactory
(DefaultListableBeanFactory beanFactory, WebMergedContextConfiguration webMergedConfig) Customize the internal bean factory of theWebApplicationContext
created by this context loader.protected void
customizeContext
(GenericWebApplicationContext context, WebMergedContextConfiguration webMergedConfig) Customize theGenericWebApplicationContext
created by this context loader after bean definitions have been loaded into the context but before the context is refreshed.protected abstract void
loadBeanDefinitions
(GenericWebApplicationContext context, WebMergedContextConfiguration webMergedConfig) Load bean definitions into the suppliedcontext
from the locations or classes in the suppliedWebMergedContextConfiguration
.final ApplicationContext
loadContext
(String... locations) AbstractGenericWebContextLoader
should be used as aSmartContextLoader
, not as a legacyContextLoader
.final ApplicationContext
loadContext
(MergedContextConfiguration mergedConfig) Load aGenericWebApplicationContext
for the suppliedMergedContextConfiguration
.loadContextForAotProcessing
(MergedContextConfiguration mergedConfig) Load aGenericWebApplicationContext
for AOT build-time processing based on the suppliedMergedContextConfiguration
.loadContextForAotRuntime
(MergedContextConfiguration mergedConfig, ApplicationContextInitializer<ConfigurableApplicationContext> initializer) Load aGenericWebApplicationContext
for AOT run-time execution based on the suppliedMergedContextConfiguration
andApplicationContextInitializer
.protected void
Validate the suppliedWebMergedContextConfiguration
with 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
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
Methods inherited from interface org.springframework.test.context.SmartContextLoader
processContextConfiguration, processLocations
-
Field Details
-
logger
protected static final org.apache.commons.logging.Log logger
-
-
Constructor Details
-
AbstractGenericWebContextLoader
public AbstractGenericWebContextLoader()
-
-
Method Details
-
loadContext
public final ApplicationContext loadContext(MergedContextConfiguration mergedConfig) throws Exception Load aGenericWebApplicationContext
for the suppliedMergedContextConfiguration
.Implementation details:
- Calls
validateMergedContextConfiguration(WebMergedContextConfiguration)
to allow subclasses to validate the supplied configuration before proceeding. - Creates a
GenericWebApplicationContext
instance. - If the supplied
MergedContextConfiguration
references a parent configuration, the correspondingApplicationContext
will 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 theMockServletContext
and 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
AnnotationConfigUtils
for 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. Refreshes
the context and registers a JVM shutdown hook for it.
- Specified by:
loadContext
in interfaceSmartContextLoader
- Parameters:
mergedConfig
- the merged context configuration to use to load the application context- Returns:
- a new web application context
- Throws:
ContextLoadException
- if context loading failedException
- See Also:
- Calls
-
loadContextForAotProcessing
public final GenericWebApplicationContext loadContextForAotProcessing(MergedContextConfiguration mergedConfig) throws Exception Load aGenericWebApplicationContext
for AOT build-time processing based on the suppliedMergedContextConfiguration
.In contrast to
loadContext(MergedContextConfiguration)
, this method does not refresh theApplicationContext
or register a JVM shutdown hook for it. Otherwise, this method implements behavior identical toloadContext(MergedContextConfiguration)
.- Specified by:
loadContextForAotProcessing
in interfaceAotContextLoader
- 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- Since:
- 6.0
- See Also:
-
loadContextForAotRuntime
public final GenericWebApplicationContext loadContextForAotRuntime(MergedContextConfiguration mergedConfig, ApplicationContextInitializer<ConfigurableApplicationContext> initializer) throws Exception Load aGenericWebApplicationContext
for AOT run-time execution based on the suppliedMergedContextConfiguration
andApplicationContextInitializer
.- Specified by:
loadContextForAotRuntime
in interfaceAotContextLoader
- Parameters:
mergedConfig
- the merged context configuration to use to load the application contextinitializer
- theApplicationContextInitializer
that should be applied to the context in order to recreate bean definitions- Returns:
- a new web application context
- Throws:
Exception
- if context loading failed- Since:
- 6.0
- See Also:
-
validateMergedContextConfiguration
Validate the suppliedWebMergedContextConfiguration
with 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
-
createContext
Factory method for creating theGenericWebApplicationContext
used by thisContextLoader
.The default implementation creates a
GenericWebApplicationContext
using the default constructor. This method may be overridden — for example, to use a custom context subclass or to create aGenericWebApplicationContext
with a customDefaultListableBeanFactory
implementation.- Returns:
- a newly instantiated
GenericWebApplicationContext
- Since:
- 5.3.23
-
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
ServletContext
of the Root WAC will be set as theServletContext
for the supplied WAC.Root WAC Configuration
- The resource base path is retrieved from the supplied
WebMergedContextConfiguration
. - A
ResourceLoader
is instantiated for theMockServletContext
: if the resource base path is prefixed with "classpath:
", aDefaultResourceLoader
will be used; otherwise, aFileSystemResourceLoader
will be used. - A
MockServletContext
will be created using the resource base path and resource loader. - The supplied
GenericWebApplicationContext
is then stored in theMockServletContext
under theWebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE
key. - Finally, the
MockServletContext
is 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 theWebApplicationContext
created 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 suppliedcontext
from 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:
-
customizeContext
protected void customizeContext(GenericWebApplicationContext context, WebMergedContextConfiguration webMergedConfig) Customize theGenericWebApplicationContext
created 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
AbstractGenericWebContextLoader
should be used as aSmartContextLoader
, not as a legacyContextLoader
. Consequently, this method is not supported.- Specified by:
loadContext
in interfaceContextLoader
- Specified by:
loadContext
in interfaceSmartContextLoader
- 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:
-