org.springframework.web.context.support

## Class GenericWebApplicationContext

- java.lang.Object
- - org.springframework.core.io.DefaultResourceLoader
  - - org.springframework.context.support.AbstractApplicationContext
    - - org.springframework.context.support.GenericApplicationContext
      - - org.springframework.web.context.support.GenericWebApplicationContext

- All Implemented Interfaces:
    Closeable, AutoCloseable, BeanFactory, HierarchicalBeanFactory, ListableBeanFactory, BeanDefinitionRegistry, ApplicationContext, ApplicationEventPublisher, ConfigurableApplicationContext, Lifecycle, MessageSource, AliasRegistry, EnvironmentCapable, ResourceLoader, ResourcePatternResolver, ThemeSource, ConfigurableWebApplicationContext, WebApplicationContext

      public class GenericWebApplicationContext
      extends GenericApplicationContext
      implements ConfigurableWebApplicationContext, ThemeSource

  Subclass of `GenericApplicationContext`, suitable for web environments.

  Implements `ConfigurableWebApplicationContext`, but is not intended for declarative setup in `web.xml`. Instead, it is designed for programmatic setup, for example for building nested contexts or for use within `WebApplicationInitializers`.

  Interprets resource paths as servlet context resources, i.e. as paths beneath the web application root. Absolute paths — for example, for files outside the web app root — can be accessed via `file:` URLs, as implemented by `AbstractApplicationContext`.

  In addition to the special beans detected by `AbstractApplicationContext`, this class detects a `ThemeSource` bean in the context, with the name "themeSource".

  If you wish to register annotated component classes with a `GenericWebApplicationContext`, you can use an `AnnotatedBeanDefinitionReader`, as demonstrated in the following example. Component classes include in particular `@Configuration` classes but also plain `@Component` classes as well as JSR-330 compliant classes using `javax.inject` annotations.

       GenericWebApplicationContext context = new GenericWebApplicationContext();
       AnnotatedBeanDefinitionReader reader = new AnnotatedBeanDefinitionReader(context);
       reader.register(AppConfig.class, UserController.class, UserRepository.class);

  If you intend to implement a `WebApplicationContext` that reads bean definitions from configuration files, consider deriving from `AbstractRefreshableWebApplicationContext`, reading the bean definitions in an implementation of the `loadBeanDefinitions` method.

  Since:
    1.2
  Author:
    Juergen Hoeller, Chris Beams, Sam Brannen

- - ### Nested Class Summary

    - ### Nested classes/interfaces inherited from class org.springframework.core.io.DefaultResourceLoader

      `DefaultResourceLoader.ClassPathContextResource`

  - ### Field Summary

    - ### Fields inherited from class org.springframework.context.support.AbstractApplicationContext

      `APPLICATION_EVENT_MULTICASTER_BEAN_NAME, LIFECYCLE_PROCESSOR_BEAN_NAME, logger, MESSAGE_SOURCE_BEAN_NAME`

    - ### Fields inherited from interface org.springframework.web.context.ConfigurableWebApplicationContext

      `APPLICATION_CONTEXT_ID_PREFIX, SERVLET_CONFIG_BEAN_NAME`

    - ### Fields inherited from interface org.springframework.web.context.WebApplicationContext

      `CONTEXT_ATTRIBUTES_BEAN_NAME, CONTEXT_PARAMETERS_BEAN_NAME, ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE, SCOPE_APPLICATION, SCOPE_REQUEST, SCOPE_SESSION, SERVLET_CONTEXT_BEAN_NAME`

    - ### Fields inherited from interface org.springframework.context.ConfigurableApplicationContext

      `APPLICATION_STARTUP_BEAN_NAME, CONFIG_LOCATION_DELIMITERS, CONVERSION_SERVICE_BEAN_NAME, ENVIRONMENT_BEAN_NAME, LOAD_TIME_WEAVER_BEAN_NAME, SHUTDOWN_HOOK_THREAD_NAME, SYSTEM_ENVIRONMENT_BEAN_NAME, SYSTEM_PROPERTIES_BEAN_NAME`

    - ### Fields inherited from interface org.springframework.beans.factory.BeanFactory

      `FACTORY_BEAN_PREFIX`

    - ### Fields inherited from interface org.springframework.core.io.support.ResourcePatternResolver

      `CLASSPATH_ALL_URL_PREFIX`

    - ### Fields inherited from interface org.springframework.core.io.ResourceLoader

      `CLASSPATH_URL_PREFIX`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `GenericWebApplicationContext()` Create a new `GenericWebApplicationContext`.
    `GenericWebApplicationContext(DefaultListableBeanFactory beanFactory)` Create a new `GenericWebApplicationContext` with the given `DefaultListableBeanFactory`.
    `GenericWebApplicationContext(DefaultListableBeanFactory beanFactory, ServletContext servletContext)` Create a new `GenericWebApplicationContext` with the given `DefaultListableBeanFactory` and `ServletContext`.
    `GenericWebApplicationContext(ServletContext servletContext)` Create a new `GenericWebApplicationContext` for the given `ServletContext`.

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `protected ConfigurableEnvironment` | `createEnvironment()` Create and return a new `StandardServletEnvironment`.
    `String` | `getApplicationName()` Return a name for the deployed application that this context belongs to.
    `String[]` | `getConfigLocations()` Return the config locations for this web application context, or `null` if none specified.
    `String` | `getNamespace()` Return the namespace for this web application context, if any.
    `protected Resource` | `getResourceByPath(String path)` This implementation supports file paths beneath the root of the `ServletContext`.
    `protected ResourcePatternResolver` | `getResourcePatternResolver()` This implementation supports pattern matching in unexpanded WARs too.
    `ServletConfig` | `getServletConfig()` Return the ServletConfig for this web application context, if any.
    `ServletContext` | `getServletContext()` Return the standard Servlet API ServletContext for this application.
    `Theme` | `getTheme(String themeName)` Return the Theme instance for the given theme name.
    `protected void` | `initPropertySources()` Replace any stub property sources with actual instances.
    `protected void` | `onRefresh()` Initialize the theme capability.
    `protected void` | `postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory)` Register request/session scopes, environment beans, a `ServletContextAwareProcessor`, etc.
    `void` | `setConfigLocation(String configLocation)` Set the config locations for this web application context in init-param style, i.e.
    `void` | `setConfigLocations(String... configLocations)` Set the config locations for this web application context.
    `void` | `setNamespace(String namespace)` Set the namespace for this web application context, to be used for building a default context config location.
    `void` | `setServletConfig(ServletConfig servletConfig)` Set the ServletConfig for this web application context.
    `void` | `setServletContext(ServletContext servletContext)` Set the `ServletContext` that this `WebApplicationContext` runs in.

    - ### Methods inherited from class org.springframework.context.support.GenericApplicationContext

      `cancelRefresh, closeBeanFactory, getAutowireCapableBeanFactory, getBeanDefinition, getBeanFactory, getClassLoader, getDefaultListableBeanFactory, getResource, getResources, isAlias, isBeanNameInUse, refreshBeanFactory, registerAlias, registerBean, registerBean, registerBean, registerBean, registerBean, registerBean, registerBeanDefinition, removeAlias, removeBeanDefinition, setAllowBeanDefinitionOverriding, setAllowCircularReferences, setApplicationStartup, setClassLoader, setParent, setResourceLoader`

    - ### Methods inherited from class org.springframework.context.support.AbstractApplicationContext

      `addApplicationListener, addBeanFactoryPostProcessor, assertBeanFactoryActive, close, containsBean, containsBeanDefinition, containsLocalBean, destroy, destroyBeans, doClose, findAnnotationOnBean, findAnnotationOnBean, finishBeanFactoryInitialization, finishRefresh, getAliases, getApplicationListeners, getApplicationStartup, getBean, getBean, getBean, getBean, getBean, getBeanDefinitionCount, getBeanDefinitionNames, getBeanFactoryPostProcessors, getBeanNamesForAnnotation, getBeanNamesForType, getBeanNamesForType, getBeanNamesForType, getBeanNamesForType, getBeanProvider, getBeanProvider, getBeanProvider, getBeanProvider, getBeansOfType, getBeansOfType, getBeansWithAnnotation, getDisplayName, getEnvironment, getId, getInternalParentBeanFactory, getInternalParentMessageSource, getMessage, getMessage, getMessage, getParent, getParentBeanFactory, getStartupDate, getType, getType, initApplicationEventMulticaster, initLifecycleProcessor, initMessageSource, invokeBeanFactoryPostProcessors, isActive, isPrototype, isRunning, isSingleton, isTypeMatch, isTypeMatch, obtainFreshBeanFactory, onClose, prepareBeanFactory, prepareRefresh, publishEvent, publishEvent, publishEvent, refresh, registerBeanPostProcessors, registerListeners, registerShutdownHook, resetCommonCaches, setDisplayName, setEnvironment, setId, start, stop, toString`

    - ### Methods inherited from class org.springframework.core.io.DefaultResourceLoader

      `addProtocolResolver, clearResourceCaches, getProtocolResolvers, getResourceCache`

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait`

    - ### Methods inherited from interface org.springframework.context.ConfigurableApplicationContext

      `addApplicationListener, addBeanFactoryPostProcessor, addProtocolResolver, close, getApplicationStartup, getBeanFactory, getEnvironment, isActive, refresh, registerShutdownHook, setApplicationStartup, setClassLoader, setEnvironment, setId, setParent`

    - ### Methods inherited from interface org.springframework.context.ApplicationContext

      `getAutowireCapableBeanFactory, getDisplayName, getId, getParent, getStartupDate`

    - ### Methods inherited from interface org.springframework.beans.factory.ListableBeanFactory

      `containsBeanDefinition, findAnnotationOnBean, findAnnotationOnBean, getBeanDefinitionCount, getBeanDefinitionNames, getBeanNamesForAnnotation, getBeanNamesForType, getBeanNamesForType, getBeanNamesForType, getBeanNamesForType, getBeanProvider, getBeanProvider, getBeansOfType, getBeansOfType, getBeansWithAnnotation`

    - ### Methods inherited from interface org.springframework.beans.factory.HierarchicalBeanFactory

      `containsLocalBean, getParentBeanFactory`

    - ### Methods inherited from interface org.springframework.beans.factory.BeanFactory

      `containsBean, getAliases, getBean, getBean, getBean, getBean, getBean, getBeanProvider, getBeanProvider, getType, getType, isPrototype, isSingleton, isTypeMatch, isTypeMatch`

    - ### Methods inherited from interface org.springframework.context.MessageSource

      `getMessage, getMessage, getMessage`

    - ### Methods inherited from interface org.springframework.context.ApplicationEventPublisher

      `publishEvent, publishEvent`

    - ### Methods inherited from interface org.springframework.core.io.support.ResourcePatternResolver

      `getResources`

    - ### Methods inherited from interface org.springframework.core.io.ResourceLoader

      `getClassLoader, getResource`

    - ### Methods inherited from interface org.springframework.context.Lifecycle

      `isRunning, start, stop`

    - ### Methods inherited from interface org.springframework.beans.factory.support.BeanDefinitionRegistry

      `containsBeanDefinition, getBeanDefinitionCount, getBeanDefinitionNames`

    - ### Methods inherited from interface org.springframework.core.AliasRegistry

      `getAliases`

- - ### Constructor Detail

    - #### GenericWebApplicationContext

          public GenericWebApplicationContext()

      Create a new `GenericWebApplicationContext`.
      See Also:
        `setServletContext(javax.servlet.ServletContext)`, `GenericApplicationContext.registerBeanDefinition(java.lang.String, org.springframework.beans.factory.config.BeanDefinition)`, `AbstractApplicationContext.refresh()`

    - #### GenericWebApplicationContext

          public GenericWebApplicationContext(ServletContext servletContext)

      Create a new `GenericWebApplicationContext` for the given `ServletContext`.
      Parameters:
        `servletContext` - the `ServletContext` to run in
      See Also:
        `GenericApplicationContext.registerBeanDefinition(java.lang.String, org.springframework.beans.factory.config.BeanDefinition)`, `AbstractApplicationContext.refresh()`

    - #### GenericWebApplicationContext

          public GenericWebApplicationContext(DefaultListableBeanFactory beanFactory)

      Create a new `GenericWebApplicationContext` with the given `DefaultListableBeanFactory`.
      Parameters:
        `beanFactory` - the `DefaultListableBeanFactory` instance to use for this context
      See Also:
        `setServletContext(javax.servlet.ServletContext)`, `GenericApplicationContext.registerBeanDefinition(java.lang.String, org.springframework.beans.factory.config.BeanDefinition)`, `AbstractApplicationContext.refresh()`

    - #### GenericWebApplicationContext

          public GenericWebApplicationContext(DefaultListableBeanFactory beanFactory,
                                              ServletContext servletContext)

      Create a new `GenericWebApplicationContext` with the given `DefaultListableBeanFactory` and `ServletContext`.
      Parameters:
        `beanFactory` - the `DefaultListableBeanFactory` instance to use for this context
        `servletContext` - the `ServletContext` to run in
      See Also:
        `GenericApplicationContext.registerBeanDefinition(java.lang.String, org.springframework.beans.factory.config.BeanDefinition)`, `AbstractApplicationContext.refresh()`

  - ### Method Detail

    - #### setServletContext

          public void setServletContext(@Nullable
                                        ServletContext servletContext)

      Set the `ServletContext` that this `WebApplicationContext` runs in.
      Specified by:
        `setServletContext` in interface `ConfigurableWebApplicationContext`
      See Also:
        `ConfigurableApplicationContext.refresh()`

    - #### getServletContext

          @Nullable
          public ServletContext getServletContext()

      Description copied from interface: `WebApplicationContext`
      Return the standard Servlet API ServletContext for this application.
      Specified by:
        `getServletContext` in interface `WebApplicationContext`

    - #### getApplicationName

          public String getApplicationName()

      Description copied from interface: `ApplicationContext`
      Return a name for the deployed application that this context belongs to.
      Specified by:
        `getApplicationName` in interface `ApplicationContext`
      Overrides:
        `getApplicationName` in class `AbstractApplicationContext`
      Returns:
        a name for the deployed application, or the empty String by default

    - #### createEnvironment

          protected ConfigurableEnvironment createEnvironment()

      Create and return a new `StandardServletEnvironment`.
      Overrides:
        `createEnvironment` in class `AbstractApplicationContext`

    - #### postProcessBeanFactory

          protected void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory)

      Register request/session scopes, environment beans, a `ServletContextAwareProcessor`, etc.
      Overrides:
        `postProcessBeanFactory` in class `AbstractApplicationContext`
      Parameters:
        `beanFactory` - the bean factory used by the application context

    - #### getResourceByPath

          protected Resource getResourceByPath(String path)

      This implementation supports file paths beneath the root of the `ServletContext`.
      Overrides:
        `getResourceByPath` in class `DefaultResourceLoader`
      Parameters:
        `path` - the path to the resource
      Returns:
        the corresponding Resource handle
      See Also:
        `ServletContextResource`

    - #### getResourcePatternResolver

          protected ResourcePatternResolver getResourcePatternResolver()

      This implementation supports pattern matching in unexpanded WARs too.
      Overrides:
        `getResourcePatternResolver` in class `AbstractApplicationContext`
      Returns:
        the ResourcePatternResolver for this context
      See Also:
        `ServletContextResourcePatternResolver`

    - #### onRefresh

          protected void onRefresh()

      Initialize the theme capability.
      Overrides:
        `onRefresh` in class `AbstractApplicationContext`
      See Also:
        `AbstractApplicationContext.refresh()`

    - #### initPropertySources

          protected void initPropertySources()

      Replace any stub property sources with actual instances.

      Replace `Servlet`-related property sources.

      Overrides:
        `initPropertySources` in class `AbstractApplicationContext`
      See Also:
        `PropertySource.StubPropertySource`, `WebApplicationContextUtils.initServletPropertySources(org.springframework.core.env.MutablePropertySources, javax.servlet.ServletContext)`

    - #### getTheme

          @Nullable
          public Theme getTheme(String themeName)

      Description copied from interface: `ThemeSource`
      Return the Theme instance for the given theme name.

      The returned Theme will resolve theme-specific messages, codes, file paths, etc (e.g. CSS and image files in a web environment).

      Specified by:
        `getTheme` in interface `ThemeSource`
      Parameters:
        `themeName` - the name of the theme
      Returns:
        the corresponding Theme, or `null` if none defined. Note that, by convention, a ThemeSource should at least be able to return a default Theme for the default theme name "theme" but may also return default Themes for other theme names.
      See Also:
        `AbstractThemeResolver.ORIGINAL_DEFAULT_THEME_NAME`

    - #### setServletConfig

          public void setServletConfig(@Nullable
                                       ServletConfig servletConfig)

      Description copied from interface: `ConfigurableWebApplicationContext`
      Set the ServletConfig for this web application context. Only called for a WebApplicationContext that belongs to a specific Servlet.
      Specified by:
        `setServletConfig` in interface `ConfigurableWebApplicationContext`
      See Also:
        `ConfigurableApplicationContext.refresh()`

    - #### getServletConfig

          @Nullable
          public ServletConfig getServletConfig()

      Description copied from interface: `ConfigurableWebApplicationContext`
      Return the ServletConfig for this web application context, if any.
      Specified by:
        `getServletConfig` in interface `ConfigurableWebApplicationContext`

    - #### setNamespace

          public void setNamespace(@Nullable
                                   String namespace)

      Description copied from interface: `ConfigurableWebApplicationContext`
      Set the namespace for this web application context, to be used for building a default context config location. The root web application context does not have a namespace.
      Specified by:
        `setNamespace` in interface `ConfigurableWebApplicationContext`

    - #### getNamespace

          @Nullable
          public String getNamespace()

      Description copied from interface: `ConfigurableWebApplicationContext`
      Return the namespace for this web application context, if any.
      Specified by:
        `getNamespace` in interface `ConfigurableWebApplicationContext`

    - #### setConfigLocation

          public void setConfigLocation(String configLocation)

      Description copied from interface: `ConfigurableWebApplicationContext`
      Set the config locations for this web application context in init-param style, i.e. with distinct locations separated by commas, semicolons or whitespace.

      If not set, the implementation is supposed to use a default for the given namespace or the root web application context, as appropriate.

      Specified by:
        `setConfigLocation` in interface `ConfigurableWebApplicationContext`

    - #### setConfigLocations

          public void setConfigLocations(String... configLocations)

      Description copied from interface: `ConfigurableWebApplicationContext`
      Set the config locations for this web application context.

      If not set, the implementation is supposed to use a default for the given namespace or the root web application context, as appropriate.

      Specified by:
        `setConfigLocations` in interface `ConfigurableWebApplicationContext`

    - #### getConfigLocations

          public String[] getConfigLocations()

      Description copied from interface: `ConfigurableWebApplicationContext`
      Return the config locations for this web application context, or `null` if none specified.
      Specified by:
        `getConfigLocations` in interface `ConfigurableWebApplicationContext`