类 ContextLoader

java.lang.Object
cn.taketoday.web.servlet.ContextLoader
直接已知子类:
ContextLoaderListener

public class ContextLoader extends Object
Performs the actual initialization work for the root application context. Called by 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 Framework'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 ApplicationContextInitializer for usage examples.

从以下版本开始:
4.0
作者:
Juergen Hoeller, Colin Sampaleanu, Sam Brannen
另请参阅:
  • 字段详细资料

    • CONTEXT_ID_PARAM

      public static final String CONTEXT_ID_PARAM
      Config param for the root WebApplicationContext id, to be used as serialization id for the underlying BeanFactory: "contextId".
      另请参阅:
    • CONFIG_LOCATION_PARAM

      public static final String 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

      public static final String CONTEXT_CLASS_PARAM
      Config param for the root WebApplicationContext implementation class to use: "contextClass".
      另请参阅:
    • CONTEXT_INITIALIZER_CLASSES_PARAM

      public static final String CONTEXT_INITIALIZER_CLASSES_PARAM
      Config param for ApplicationContextInitializer classes to use for initializing the root web application context: "contextInitializerClasses".
      另请参阅:
    • GLOBAL_INITIALIZER_CLASSES_PARAM

      public static final String GLOBAL_INITIALIZER_CLASSES_PARAM
      Config param for global ApplicationContextInitializer classes to use for initializing all web application contexts in the current application: "globalInitializerClasses".
      另请参阅:
    • INIT_PARAM_DELIMITERS

      private static final String INIT_PARAM_DELIMITERS
      Any number of these characters are considered delimiters between multiple values in a single init-param String value.
      另请参阅:
    • DEFAULT_STRATEGIES_PATH

      private static final String DEFAULT_STRATEGIES_PATH
      Name of the class path resource (relative to the ContextLoader class) that defines ContextLoader's default strategy names.
      另请参阅:
    • defaultStrategies

      @Nullable private static Properties defaultStrategies
    • currentContextPerThread

      private static final Map<ClassLoader,WebApplicationContext> currentContextPerThread
      Map from (thread context) ClassLoader to corresponding 'current' WebApplicationContext.
    • currentContext

      @Nullable private static volatile WebApplicationContext currentContext
      The 'current' WebApplicationContext, if the ContextLoader class is deployed in the web app ClassLoader itself.
    • context

      @Nullable private WebApplicationContext context
      The root WebApplicationContext instance that this loader manages.
    • contextInitializers

      private final List<cn.taketoday.context.ApplicationContextInitializer> contextInitializers
      Actual ApplicationContextInitializer instances to apply to the context.
  • 构造器详细资料

  • 方法详细资料

    • setContextInitializers

      public void setContextInitializers(@Nullable cn.taketoday.context.ApplicationContextInitializer... initializers)
      Specify which ApplicationContextInitializer instances should be used to initialize the application context used by this ContextLoader.
      另请参阅:
    • initWebApplicationContext

      public WebApplicationContext initWebApplicationContext(ServletContext servletContext)
      Initialize Framework'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.
      参数:
      servletContext - current servlet context
      返回:
      the new WebApplicationContext
      另请参阅:
    • createWebApplicationContext

      protected WebApplicationContext createWebApplicationContext(ServletContext sc)
      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, cn.taketoday.web.servlet.ConfigurableWebApplicationContext) gets called prior to refreshing the context, allowing subclasses to perform custom modifications to the context.

      参数:
      sc - current servlet context
      返回:
      the root WebApplicationContext
      另请参阅:
    • determineContextClass

      protected Class<?> determineContextClass(ServletContext servletContext)
      Return the WebApplicationContext implementation class to use, either the default XmlWebApplicationContext or a custom context class if specified.
      参数:
      servletContext - current servlet context
      返回:
      the WebApplicationContext implementation class to use
      另请参阅:
    • configureAndRefreshWebApplicationContext

      protected void configureAndRefreshWebApplicationContext(ConfigurableWebApplicationContext wac, ServletContext sc)
    • customizeContext

      protected void customizeContext(ServletContext sc, ConfigurableWebApplicationContext wac)
      Customize the ConfigurableWebApplicationContext 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 implementing Ordered or marked with @Order will be sorted appropriately.

      参数:
      sc - the current servlet context
      wac - the newly created application context
      另请参阅:
    • determineContextInitializerClasses

      protected List<Class<cn.taketoday.context.ApplicationContextInitializer>> determineContextInitializerClasses(ServletContext servletContext)
      Return the ApplicationContextInitializer implementation classes to use if any have been specified by CONTEXT_INITIALIZER_CLASSES_PARAM.
      参数:
      servletContext - current servlet context
      另请参阅:
    • loadInitializerClass

      private Class<cn.taketoday.context.ApplicationContextInitializer> loadInitializerClass(String className)
    • loadParentContext

      @Nullable protected cn.taketoday.context.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. 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.

      参数:
      servletContext - current servlet context
      返回:
      the parent application context, or null if none
    • closeWebApplicationContext

      public void closeWebApplicationContext(ServletContext servletContext)
      Close Framework's web application context for the given servlet context.

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

      参数:
      servletContext - the ServletContext that the WebApplicationContext runs in
    • getCurrentWebApplicationContext

      @Nullable public static WebApplicationContext getCurrentWebApplicationContext()
      Obtain the Framework 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).
      返回:
      the current root web application context, or null if none found