Class ContextLoader
- Direct Known Subclasses:
ContextLoaderListener
ContextLoaderListener
.
Looks for a "contextClass"
parameter at the
web.xml
context-param level to specify the context class type, falling
back to XmlWebApplicationContext
if not found. With the default ContextLoader implementation, any context class
specified needs to implement the ConfigurableWebApplicationContext
interface.
Processes a "contextConfigLocation"
context-param
and passes its value to the context instance, parsing it into potentially multiple
file paths which can be separated by any number of commas and spaces, e.g.
"WEB-INF/applicationContext1.xml, WEB-INF/applicationContext2.xml".
Ant-style path patterns are supported as well, e.g.
"WEB-INF/*Context.xml,WEB-INF/spring*.xml" or "WEB-INF/**/*Context.xml".
If not explicitly specified, the context implementation is supposed to use a
default location (with XmlWebApplicationContext: "/WEB-INF/applicationContext.xml").
Note: In case of multiple config locations, later bean definitions will override ones defined in previously loaded files, at least when using one of Spring's default ApplicationContext implementations. This can be leveraged to deliberately override certain bean definitions via an extra XML file.
Above and beyond loading the root application context, this class can optionally
load or obtain and hook up a shared parent context to the root application context.
See the loadParentContext(ServletContext)
method for more information.
ContextLoader
supports injecting the root web application context
via the ContextLoader(WebApplicationContext)
constructor, allowing for
programmatic configuration in Servlet initializers. See
WebApplicationInitializer
for usage examples.
- Since:
- 17.02.2003
- Author:
- Juergen Hoeller, Colin Sampaleanu, Sam Brannen
- See Also:
-
Field Summary
Modifier and TypeFieldDescriptionstatic final String
Name of servlet context parameter (i.e., "contextConfigLocation") that can specify the config location for the root context, falling back to the implementation's default otherwise.static final String
Config param for the root WebApplicationContext implementation class to use: "contextClass".static final String
Config param for the root WebApplicationContext id, to be used as serialization id for the underlying BeanFactory: "contextId".static final String
Config param forApplicationContextInitializer
classes to use for initializing the root web application context: "contextInitializerClasses".static final String
Config param for globalApplicationContextInitializer
classes to use for initializing all web application contexts in the current application: "globalInitializerClasses". -
Constructor Summary
ConstructorDescriptionCreate a newContextLoader
that will create a web application context based on the "contextClass" and "contextConfigLocation" servlet context-params.ContextLoader
(WebApplicationContext context) Create a newContextLoader
with the given application context. -
Method Summary
Modifier and TypeMethodDescriptionvoid
closeWebApplicationContext
(ServletContext servletContext) Close Spring's web application context for the given servlet context.protected void
protected WebApplicationContext
Instantiate the root WebApplicationContext for this loader, either the default context class or a custom context class if specified.protected void
Customize theConfigurableWebApplicationContext
created by this ContextLoader after config locations have been supplied to the context but before the context is refreshed.protected Class<?>
determineContextClass
(ServletContext servletContext) Return the WebApplicationContext implementation class to use, either the default XmlWebApplicationContext or a custom context class if specified.determineContextInitializerClasses
(ServletContext servletContext) Return theApplicationContextInitializer
implementation classes to use if any have been specified byCONTEXT_INITIALIZER_CLASSES_PARAM
.static WebApplicationContext
Obtain the Spring root web application context for the current thread (i.e.initWebApplicationContext
(ServletContext servletContext) Initialize Spring's web application context for the given servlet context, using the application context provided at construction time, or creating a new one according to the "contextClass
" and "contextConfigLocation
" context-params.protected ApplicationContext
loadParentContext
(ServletContext servletContext) Template method with default implementation (which may be overridden by a subclass), to load or obtain an ApplicationContext instance which will be used as the parent context of the root WebApplicationContext.void
setContextInitializers
(ApplicationContextInitializer<?>... initializers) Specify whichApplicationContextInitializer
instances should be used to initialize the application context used by thisContextLoader
.
-
Field Details
-
CONTEXT_ID_PARAM
Config param for the root WebApplicationContext id, to be used as serialization id for the underlying BeanFactory: "contextId".- See Also:
-
CONFIG_LOCATION_PARAM
Name of servlet context parameter (i.e., "contextConfigLocation") that can specify the config location for the root context, falling back to the implementation's default otherwise. -
CONTEXT_CLASS_PARAM
Config param for the root WebApplicationContext implementation class to use: "contextClass". -
CONTEXT_INITIALIZER_CLASSES_PARAM
Config param forApplicationContextInitializer
classes to use for initializing the root web application context: "contextInitializerClasses". -
GLOBAL_INITIALIZER_CLASSES_PARAM
Config param for globalApplicationContextInitializer
classes to use for initializing all web application contexts in the current application: "globalInitializerClasses".
-
-
Constructor Details
-
ContextLoader
public ContextLoader()Create a newContextLoader
that will create a web application context based on the "contextClass" and "contextConfigLocation" servlet context-params. See class-level documentation for details on default values for each.This constructor is typically used when declaring the
ContextLoaderListener
subclass as a<listener>
withinweb.xml
, as a no-arg constructor is required.The created application context will be registered into the ServletContext under the attribute name
WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE
and subclasses are free to call thecloseWebApplicationContext(jakarta.servlet.ServletContext)
method on container shutdown to close the application context. -
ContextLoader
Create a newContextLoader
with the given application context. This constructor is useful in Servlet initializers where instance-based registration of listeners is possible through theServletContext.addListener(java.lang.String)
API.The context may or may not yet be refreshed. If it (a) is an implementation of
ConfigurableWebApplicationContext
and (b) has not already been refreshed (the recommended approach), then the following will occur:- If the given context has not already been assigned an id, one will be assigned to it
ServletContext
andServletConfig
objects will be delegated to the application contextcustomizeContext(jakarta.servlet.ServletContext, org.springframework.web.context.ConfigurableWebApplicationContext)
will be called- Any
ApplicationContextInitializers
specified through the "contextInitializerClasses" init-param will be applied. refresh()
will be called
ConfigurableWebApplicationContext
, none of the above will occur under the assumption that the user has performed these actions (or not) per his or her specific needs.See
WebApplicationInitializer
for usage examples.In any case, the given application context will be registered into the ServletContext under the attribute name
WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE
and subclasses are free to call thecloseWebApplicationContext(jakarta.servlet.ServletContext)
method on container shutdown to close the application context.- Parameters:
context
- the application context to manage- See Also:
-
-
Method Details
-
setContextInitializers
Specify whichApplicationContextInitializer
instances should be used to initialize the application context used by thisContextLoader
. -
initWebApplicationContext
Initialize Spring's web application context for the given servlet context, using the application context provided at construction time, or creating a new one according to the "contextClass
" and "contextConfigLocation
" context-params.- Parameters:
servletContext
- current servlet context- Returns:
- the new WebApplicationContext
- See Also:
-
createWebApplicationContext
Instantiate the root WebApplicationContext for this loader, either the default context class or a custom context class if specified.This implementation expects custom contexts to implement the
ConfigurableWebApplicationContext
interface. Can be overridden in subclasses.In addition,
customizeContext(jakarta.servlet.ServletContext, org.springframework.web.context.ConfigurableWebApplicationContext)
gets called prior to refreshing the context, allowing subclasses to perform custom modifications to the context.- Parameters:
sc
- current servlet context- Returns:
- the root WebApplicationContext
- See Also:
-
determineContextClass
Return the WebApplicationContext implementation class to use, either the default XmlWebApplicationContext or a custom context class if specified.- Parameters:
servletContext
- current servlet context- Returns:
- the WebApplicationContext implementation class to use
- See Also:
-
configureAndRefreshWebApplicationContext
protected void configureAndRefreshWebApplicationContext(ConfigurableWebApplicationContext wac, ServletContext sc) -
customizeContext
Customize theConfigurableWebApplicationContext
created by this ContextLoader after config locations have been supplied to the context but before the context is refreshed.The default implementation determines what (if any) context initializer classes have been specified through context init parameters and invokes each with the given web application context.
Any
ApplicationContextInitializers
implementingOrdered
or marked with @Order
will be sorted appropriately.- Parameters:
sc
- the current servlet contextwac
- the newly created application context- See Also:
-
determineContextInitializerClasses
protected List<Class<ApplicationContextInitializer<ConfigurableApplicationContext>>> determineContextInitializerClasses(ServletContext servletContext) Return theApplicationContextInitializer
implementation classes to use if any have been specified byCONTEXT_INITIALIZER_CLASSES_PARAM
.- Parameters:
servletContext
- current servlet context- See Also:
-
loadParentContext
Template method with default implementation (which may be overridden by a subclass), to load or obtain an ApplicationContext instance which will be used as the parent context of the root WebApplicationContext. If the return value from the method is null, no parent context is set.The main reason to load a parent context here is to allow multiple root web application contexts to all be children of a shared EAR context, or alternately to also share the same parent context that is visible to EJBs. For pure web applications, there is usually no need to worry about having a parent context to the root web application context.
The default implementation simply returns
null
, as of 5.0.- Parameters:
servletContext
- current servlet context- Returns:
- the parent application context, or
null
if none
-
closeWebApplicationContext
Close Spring's web application context for the given servlet context.If overriding
loadParentContext(ServletContext)
, you may have to override this method as well.- Parameters:
servletContext
- the ServletContext that the WebApplicationContext runs in
-
getCurrentWebApplicationContext
Obtain the Spring root web application context for the current thread (i.e. for the current thread's context ClassLoader, which needs to be the web application's ClassLoader).- Returns:
- the current root web application context, or
null
if none found - See Also:
-