Package 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`, `org.springframework.beans.factory.BeanFactory`, `org.springframework.beans.factory.HierarchicalBeanFactory`, `org.springframework.beans.factory.ListableBeanFactory`, `org.springframework.beans.factory.support.BeanDefinitionRegistry`, `org.springframework.context.ApplicationContext`, `org.springframework.context.ApplicationEventPublisher`, `org.springframework.context.ConfigurableApplicationContext`, `org.springframework.context.Lifecycle`, `org.springframework.context.MessageSource`, `org.springframework.core.AliasRegistry`, `org.springframework.core.env.EnvironmentCapable`, `org.springframework.core.io.ResourceLoader`, `org.springframework.core.io.support.ResourcePatternResolver`, `org.springframework.ui.context.ThemeSource`, `ConfigurableWebApplicationContext`, `WebApplicationContext`

public class GenericWebApplicationContext extends org.springframework.context.support.GenericApplicationContext implements ConfigurableWebApplicationContext, org.springframework.ui.context.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". Theme support is deprecated as of 6.0 with no direct replacement.

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 `jakarta.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

`org.springframework.core.io.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.beans.factory.BeanFactory

`FACTORY_BEAN_PREFIX, FACTORY_BEAN_PREFIX_CHAR`

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

`APPLICATION_STARTUP_BEAN_NAME, BOOTSTRAP_EXECUTOR_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.web.context.ConfigurableWebApplicationContext

`APPLICATION_CONTEXT_ID_PREFIX, SERVLET_CONFIG_BEAN_NAME`

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

`CLASSPATH_URL_PREFIX`

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

`CLASSPATH_ALL_URL_PREFIX`

### 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`

## Constructor Summary

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

## Method Summary

Modifier and Type
Method
Description
`protected org.springframework.core.env.ConfigurableEnvironment`
`createEnvironment()`
Create and return a new `StandardServletEnvironment`.
`String`
`getApplicationName()`
`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 org.springframework.core.io.Resource`
`getResourceByPath(String path)`
This implementation supports file paths beneath the root of the `ServletContext`.
`protected org.springframework.core.io.support.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.
`org.springframework.ui.context.Theme`
`getTheme(String themeName)`
Deprecated.
`protected void`
`initPropertySources()`
`protected void`
`onRefresh()`
Initialize the theme capability.
`protected void`
`postProcessBeanFactory(org.springframework.beans.factory.config.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, isBeanDefinitionOverridable, isBeanNameInUse, refreshBeanFactory, refreshForAotProcessing, 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, clearResourceCaches, close, containsBean, containsBeanDefinition, containsLocalBean, destroyBeans, doClose, findAllAnnotationsOnBean, 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, isClosed, isPrototype, isRunning, isSingleton, isTypeMatch, isTypeMatch, obtainFreshBeanFactory, onClose, prepareBeanFactory, prepareRefresh, publishEvent, publishEvent, publishEvent, refresh, registerBeanPostProcessors, registerListeners, registerShutdownHook, removeApplicationListener, resetCommonCaches, setDisplayName, setEnvironment, setId, start, stop, toString`

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

`addProtocolResolver, 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.core.AliasRegistry

`getAliases`

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

`getAutowireCapableBeanFactory, getDisplayName, getId, getParent, getStartupDate`

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

`publishEvent, publishEvent`

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

`containsBeanDefinition, getBeanDefinitionCount, getBeanDefinitionNames`

### 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.ConfigurableApplicationContext

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

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

`containsLocalBean, getParentBeanFactory`

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

`isRunning, start, stop`

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

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

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

`getMessage, getMessage, getMessage`

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

`getClassLoader, getResource`

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

`getResources`

## Constructor Details

### GenericWebApplicationContext

public GenericWebApplicationContext()
Create a new `GenericWebApplicationContext`.

See Also:
  - `setServletContext(jakarta.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(org.springframework.beans.factory.support.DefaultListableBeanFactory beanFactory)
Create a new `GenericWebApplicationContext` with the given `DefaultListableBeanFactory`.

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

### GenericWebApplicationContext

public GenericWebApplicationContext(org.springframework.beans.factory.support.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 Details

### 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()

Specified by:
  `getApplicationName` in interface `org.springframework.context.ApplicationContext`
Overrides:
  `getApplicationName` in class `org.springframework.context.support.AbstractApplicationContext`

### createEnvironment

protected org.springframework.core.env.ConfigurableEnvironment createEnvironment()
Create and return a new `StandardServletEnvironment`.

Overrides:
  `createEnvironment` in class `org.springframework.context.support.AbstractApplicationContext`

### postProcessBeanFactory

protected void postProcessBeanFactory(org.springframework.beans.factory.config.ConfigurableListableBeanFactory beanFactory)
Register request/session scopes, environment beans, a `ServletContextAwareProcessor`, etc.

Overrides:
  `postProcessBeanFactory` in class `org.springframework.context.support.AbstractApplicationContext`

### getResourceByPath

protected org.springframework.core.io.Resource getResourceByPath(String path)
This implementation supports file paths beneath the root of the `ServletContext`.

Overrides:
  `getResourceByPath` in class `org.springframework.core.io.DefaultResourceLoader`
See Also:
  - `ServletContextResource`

### getResourcePatternResolver

protected org.springframework.core.io.support.ResourcePatternResolver getResourcePatternResolver()
This implementation supports pattern matching in unexpanded WARs too.

Overrides:
  `getResourcePatternResolver` in class `org.springframework.context.support.AbstractApplicationContext`
See Also:
  - `ServletContextResourcePatternResolver`

### onRefresh

protected void onRefresh()
Initialize the theme capability.

Overrides:
  `onRefresh` in class `org.springframework.context.support.AbstractApplicationContext`

### initPropertySources

protected void initPropertySources()

Replace `Servlet`-related property sources.

Overrides:
  `initPropertySources` in class `org.springframework.context.support.AbstractApplicationContext`

### getTheme

@Nullable @Deprecated public org.springframework.ui.context.Theme getTheme(String themeName)
Deprecated.

Specified by:
  `getTheme` in interface `org.springframework.ui.context.ThemeSource`

### 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`