org.springframework.web.context
Class ContextLoader

java.lang.Object
  extended byorg.springframework.web.context.ContextLoader

public class ContextLoader
extends Object

Performs the actual initialization work for the root application context. Called by ContextLoaderListener and ContextLoaderServlet.

Looks for a "contextClass" parameter at the web.xml context-param level to specify the context class type, falling back to the default of XmlWebApplicationContext if not found. With the default ContextLoader implementation, any context class specified needs to implement ConfigurableWebApplicationContext.

Passes a "contextConfigLocation" context-param to the context instance, parsing it into potentially multiple file paths which can be separated by any number of commas and spaces, like "applicationContext1.xml, applicationContext2.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 earlier 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.

Since:
17.02.2003
Author:
Juergen Hoeller, Colin Sampaleanu
See Also:
ContextLoaderListener, ContextLoaderServlet, ConfigurableWebApplicationContext, XmlWebApplicationContext

Field Summary
static String BEAN_FACTORY_LOCATOR_FACTORY_KEY_PARAM
          Optional servlet context parameter used only when obtaining a parent context using the default implementation of loadParentContext(ServletContext servletContext).
protected  BeanFactoryReference beanFactoryRef
          Holds BeanFactoryReference when loading parent factory via ContextSingletonBeanFactoryLocator.
static String CONFIG_LOCATION_PARAM
          Name of servlet context parameter that can specify the config location for the root context, falling back to the implementation's default otherwise.
static String CONTEXT_CLASS_PARAM
          Config param for the root WebApplicationContext implementation class to use: "contextClass"
static Class DEFAULT_CONTEXT_CLASS
          Default context class for ContextLoader.
static String LOCATOR_FACTORY_SELECTOR_PARAM
          Optional servlet context parameter used only when obtaining a parent context using the default implementation of loadParentContext(ServletContext servletContext).
 
Constructor Summary
ContextLoader()
           
 
Method Summary
 void closeWebApplicationContext(ServletContext servletContext)
          Close Spring's web application context for the given servlet context.
protected  WebApplicationContext createWebApplicationContext(ServletContext servletContext, ApplicationContext parent)
          Instantiate the root WebApplicationContext for this loader, either a default XmlWebApplicationContext or a custom context class if specified.
 WebApplicationContext initWebApplicationContext(ServletContext servletContext)
          Initialize Spring's web application context for the given servlet context, regarding 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.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

CONTEXT_CLASS_PARAM

public static final String CONTEXT_CLASS_PARAM
Config param for the root WebApplicationContext implementation class to use: "contextClass"

See Also:
Constant Field Values

DEFAULT_CONTEXT_CLASS

public static final Class DEFAULT_CONTEXT_CLASS
Default context class for ContextLoader.

See Also:
XmlWebApplicationContext

CONFIG_LOCATION_PARAM

public static final String CONFIG_LOCATION_PARAM
Name of servlet context parameter that can specify the config location for the root context, falling back to the implementation's default otherwise.

See Also:
XmlWebApplicationContext.DEFAULT_CONFIG_LOCATION, Constant Field Values

LOCATOR_FACTORY_SELECTOR_PARAM

public static final String LOCATOR_FACTORY_SELECTOR_PARAM
Optional servlet context parameter used only when obtaining a parent context using the default implementation of loadParentContext(ServletContext servletContext). Specifies the 'selector' used in the ContextSingletonBeanFactoryLocator.getInstance(String selector) method call used to obtain the BeanFactoryLocator instance from which the parent context is obtained.

This will normally be set to classpath*:beanRefContext.xml to match the default applied for the ContextSingletonBeanFactoryLocator.getInstance()method.

See Also:
Constant Field Values

BEAN_FACTORY_LOCATOR_FACTORY_KEY_PARAM

public static final String BEAN_FACTORY_LOCATOR_FACTORY_KEY_PARAM
Optional servlet context parameter used only when obtaining a parent context using the default implementation of loadParentContext(ServletContext servletContext). Specifies the 'factoryKey' used in the BeanFactoryLocator.useBeanFactory(String factoryKey)method call used to obtain the parent application context from the BeanFactoryLocator instance.

See Also:
Constant Field Values

beanFactoryRef

protected BeanFactoryReference beanFactoryRef
Holds BeanFactoryReference when loading parent factory via ContextSingletonBeanFactoryLocator.

Constructor Detail

ContextLoader

public ContextLoader()
Method Detail

initWebApplicationContext

public WebApplicationContext initWebApplicationContext(ServletContext servletContext)
                                                throws BeansException
Initialize Spring's web application context for the given servlet context, regarding the "contextClass" and "contextConfigLocation" context-params.

Parameters:
servletContext - current servlet context
Returns:
the new WebApplicationContext
Throws:
BeansException - if the context couldn't be initialized
See Also:
CONTEXT_CLASS_PARAM, CONFIG_LOCATION_PARAM

createWebApplicationContext

protected WebApplicationContext createWebApplicationContext(ServletContext servletContext,
                                                            ApplicationContext parent)
                                                     throws BeansException
Instantiate the root WebApplicationContext for this loader, either a default XmlWebApplicationContext or a custom context class if specified.

This implementation expects custom contexts to implement ConfigurableWebApplicationContext. Can be overridden in subclasses.

Parameters:
servletContext - current servlet context
parent - the parent ApplicationContext to use, or null if none
Throws:
BeansException - if the context couldn't be initialized
See Also:
CONTEXT_CLASS_PARAM, DEFAULT_CONTEXT_CLASS, ConfigurableWebApplicationContext, XmlWebApplicationContext

loadParentContext

protected ApplicationContext loadParentContext(ServletContext servletContext)
                                        throws BeansException
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 uses ContextSingletonBeanFactoryLocator, configured via LOCATOR_FACTORY_SELECTOR_PARAM and BEAN_FACTORY_LOCATOR_FACTORY_KEY_PARAM, to load a parent context which will be shared by all other users of ContextsingletonBeanFactoryLocator which also use the same configuration parameters.

Parameters:
servletContext - current servlet context
Returns:
the parent application context, or null if none
Throws:
BeansException - if the context couldn't be initialized
See Also:
BeanFactoryLocator, ContextSingletonBeanFactoryLocator

closeWebApplicationContext

public void closeWebApplicationContext(ServletContext servletContext)
                                throws ApplicationContextException
Close Spring's web application context for the given servlet context. If the default loadParentContext(ServletContext)implementation, which uses ContextSingletonBeanFactoryLocator, has loaded any shared parent context, release one reference to that shared parent context.

If overriding loadParentContext(ServletContext), you may have to override this method as well.

Parameters:
servletContext - current servlet context
Throws:
ApplicationContextException


Copyright (C) 2003-2004 The Spring Framework Project.