org.springframework.web.portlet.context

## Class AbstractRefreshablePortletApplicationContext

- java.lang.Object
- - org.springframework.core.io.DefaultResourceLoader
  - - org.springframework.context.support.AbstractApplicationContext
    - - org.springframework.context.support.AbstractRefreshableApplicationContext
      - - org.springframework.context.support.AbstractRefreshableConfigApplicationContext
        - - org.springframework.web.portlet.context.AbstractRefreshablePortletApplicationContext

- All Implemented Interfaces:
    Closeable, AutoCloseable, Aware, BeanFactory, BeanNameAware, DisposableBean, HierarchicalBeanFactory, InitializingBean, ListableBeanFactory, ApplicationContext, ApplicationEventPublisher, ConfigurableApplicationContext, Lifecycle, MessageSource, EnvironmentCapable, ResourceLoader, ResourcePatternResolver, WebApplicationContext, ConfigurablePortletApplicationContext
  Direct Known Subclasses:
    XmlPortletApplicationContext

      public abstract class AbstractRefreshablePortletApplicationContext
      extends AbstractRefreshableConfigApplicationContext
      implements WebApplicationContext, ConfigurablePortletApplicationContext

  `AbstractRefreshableApplicationContext` subclass which implements the `ConfigurablePortletApplicationContext` interface for portlet environments. Provides a "configLocations" property, to be populated through the ConfigurablePortletApplicationContext interface on portlet application startup.

  This class is as easy to subclass as AbstractRefreshableApplicationContext: All you need to implements is the `AbstractRefreshableApplicationContext.loadBeanDefinitions(org.springframework.beans.factory.support.DefaultListableBeanFactory)` method; see the superclass javadoc for details. Note that implementations are supposed to load bean definitions from the files specified by the locations returned by the `getConfigLocations()` method.

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

  This is the portlet context to be subclassed for a different bean definition format. Such a context implementation can be specified as "contextClass" init-param for FrameworkPortlet, replacing the default `XmlPortletApplicationContext`. It will then automatically receive the "contextConfigLocation" init-param.

  Note that Portlet-based context implementations are generally supposed to configure themselves based on the configuration received through the `ConfigurablePortletApplicationContext` interface. In contrast, a standalone application context might allow for configuration in custom startup code (for example, `GenericApplicationContext`).

  Since:
    2.0
  Author:
    Juergen Hoeller, John A. Lewis
  See Also:
    `AbstractRefreshableApplicationContext.loadBeanDefinitions(org.springframework.beans.factory.support.DefaultListableBeanFactory)`, `ConfigurablePortletApplicationContext.setConfigLocations(java.lang.String[])`, `XmlPortletApplicationContext`

- - ### 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.portlet.context.ConfigurablePortletApplicationContext

      `APPLICATION_CONTEXT_ID_PREFIX, PORTLET_CONFIG_BEAN_NAME, PORTLET_CONTEXT_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_GLOBAL_SESSION, SCOPE_REQUEST, SCOPE_SESSION, SERVLET_CONTEXT_BEAN_NAME`

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

      `CONFIG_LOCATION_DELIMITERS, CONVERSION_SERVICE_BEAN_NAME, ENVIRONMENT_BEAN_NAME, LOAD_TIME_WEAVER_BEAN_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
    `AbstractRefreshablePortletApplicationContext()`

  - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `protected ConfigurableEnvironment` | `createEnvironment()` Create and return a new `StandardPortletEnvironment`.
    `protected void` | `customizeBeanFactory(DefaultListableBeanFactory beanFactory)` Customize the internal bean factory used by this context.
    `String` | `getApplicationName()` Return a name for the deployed application that this context belongs to.
    `String[]` | `getConfigLocations()` Return an array of resource locations, referring to the XML bean definition files that this context should be built with.
    `String` | `getNamespace()` Return the namespace for this web application context, if any.
    `PortletConfig` | `getPortletConfig()` Return the PortletConfig for this portlet application context, if any.
    `PortletContext` | `getPortletContext()` Return the standard Portlet API PortletContext for this application.
    `protected Resource` | `getResourceByPath(String path)` This implementation supports file paths beneath the root of the PortletContext.
    `protected ResourcePatternResolver` | `getResourcePatternResolver()` This implementation supports pattern matching in unexpanded WARs too.
    `ServletContext` | `getServletContext()` Return the standard Servlet API ServletContext for this application.
    `protected void` | `postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory)` Register request/session scopes, a `PortletContextAwareProcessor`, etc.
    `void` | `setNamespace(String namespace)` Set the namespace for this portlet application context, to be used for building a default context config location.
    `void` | `setParent(ApplicationContext parent)` Set the parent of this application context.
    `void` | `setPortletConfig(PortletConfig portletConfig)` Set the PortletConfig for this portlet application context.
    `void` | `setPortletContext(PortletContext portletContext)` Set the PortletContext for this portlet application context.

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

      `afterPropertiesSet, getDefaultConfigLocations, resolvePath, setBeanName, setConfigLocation, setConfigLocations, setId`

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

      `cancelRefresh, closeBeanFactory, createBeanFactory, getBeanFactory, hasBeanFactory, loadBeanDefinitions, refreshBeanFactory, setAllowBeanDefinitionOverriding, setAllowCircularReferences`

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

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

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

      `getClassLoader, getResource, setClassLoader`

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

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

    - ### Methods inherited from interface org.springframework.web.portlet.context.ConfigurablePortletApplicationContext

      `setConfigLocation, setConfigLocations`

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

      `addApplicationListener, addBeanFactoryPostProcessor, close, getBeanFactory, getEnvironment, isActive, refresh, registerShutdownHook, setEnvironment, setId`

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

      `getAutowireCapableBeanFactory, getDisplayName, getId, getParent, getStartupDate`

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

      `containsBeanDefinition, findAnnotationOnBean, getBeanDefinitionCount, getBeanDefinitionNames, getBeanNamesForType, getBeanNamesForType, 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, getType, isPrototype, isSingleton, isTypeMatch`

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

      `getMessage, getMessage, getMessage`

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

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

- - ### Constructor Detail

    - #### AbstractRefreshablePortletApplicationContext

          public AbstractRefreshablePortletApplicationContext()

  - ### Method Detail

    - #### setParent

          public void setParent(ApplicationContext parent)

      Set the parent of this application context.

      Note that the parent shouldn't be changed: It should only be set outside a constructor if it isn't available when an object of this class is created, for example in case of WebApplicationContext setup.

      The parent environment is merged with this (child) application context environment if the parent is non-`null` and its environment is an instance of `ConfigurableEnvironment`.

      The parent environment is delegated to this (child) context if the parent is a `ConfigurableApplicationContext` implementation.

      The parent servlet context is delegated to this (child) context if the parent is a `WebApplicationContext` implementation.

      Specified by:
        `setParent` in interface `ConfigurableApplicationContext`
      Overrides:
        `setParent` in class `AbstractApplicationContext`
      Parameters:
        `parent` - the parent context
      See Also:
        `ConfigurableEnvironment.merge(ConfigurableEnvironment)`

    - #### getServletContext

          public ServletContext getServletContext()

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

      Also available for a Portlet application, in addition to the PortletContext.

      Specified by:
        `getServletContext` in interface `WebApplicationContext`

    - #### setPortletContext

          public void setPortletContext(PortletContext portletContext)

      Description copied from interface: `ConfigurablePortletApplicationContext`
      Set the PortletContext for this portlet application context.

      Does not cause an initialization of the context: refresh needs to be called after the setting of all configuration properties.

      Specified by:
        `setPortletContext` in interface `ConfigurablePortletApplicationContext`
      See Also:
        `ConfigurableApplicationContext.refresh()`

    - #### getPortletContext

          public PortletContext getPortletContext()

      Description copied from interface: `ConfigurablePortletApplicationContext`
      Return the standard Portlet API PortletContext for this application.
      Specified by:
        `getPortletContext` in interface `ConfigurablePortletApplicationContext`

    - #### setPortletConfig

          public void setPortletConfig(PortletConfig portletConfig)

      Description copied from interface: `ConfigurablePortletApplicationContext`
      Set the PortletConfig for this portlet application context.
      Specified by:
        `setPortletConfig` in interface `ConfigurablePortletApplicationContext`
      See Also:
        `ConfigurableApplicationContext.refresh()`

    - #### getPortletConfig

          public PortletConfig getPortletConfig()

      Description copied from interface: `ConfigurablePortletApplicationContext`
      Return the PortletConfig for this portlet application context, if any.
      Specified by:
        `getPortletConfig` in interface `ConfigurablePortletApplicationContext`

    - #### setNamespace

          public void setNamespace(String namespace)

      Description copied from interface: `ConfigurablePortletApplicationContext`
      Set the namespace for this portlet application context, to be used for building a default context config location.
      Specified by:
        `setNamespace` in interface `ConfigurablePortletApplicationContext`

    - #### getNamespace

          public String getNamespace()

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

    - #### getConfigLocations

          public String[] getConfigLocations()

      Description copied from class: `AbstractRefreshableConfigApplicationContext`
      Return an array of resource locations, referring to the XML bean definition files that this context should be built with. Can also include location patterns, which will get resolved via a ResourcePatternResolver.

      The default implementation returns `null`. Subclasses can override this to provide a set of resource locations to load bean definitions from.

      Specified by:
        `getConfigLocations` in interface `ConfigurablePortletApplicationContext`
      Overrides:
        `getConfigLocations` in class `AbstractRefreshableConfigApplicationContext`
      Returns:
        an array of resource locations, or `null` if none
      See Also:
        `AbstractApplicationContext.getResources(java.lang.String)`, `AbstractApplicationContext.getResourcePatternResolver()`

    - #### 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 `StandardPortletEnvironment`.
      Overrides:
        `createEnvironment` in class `AbstractApplicationContext`

    - #### postProcessBeanFactory

          protected void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory)

      Register request/session scopes, a `PortletContextAwareProcessor`, 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 PortletContext.
      Overrides:
        `getResourceByPath` in class `DefaultResourceLoader`
      Parameters:
        `path` - the path to the resource
      Returns:
        the corresponding Resource handle
      See Also:
        `PortletContextResource`

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

    - #### customizeBeanFactory

          protected void customizeBeanFactory(DefaultListableBeanFactory beanFactory)

      Description copied from class: `AbstractRefreshableApplicationContext`
      Customize the internal bean factory used by this context. Called for each `AbstractApplicationContext.refresh()` attempt.

      The default implementation applies this context's "allowBeanDefinitionOverriding" and "allowCircularReferences" settings, if specified. Can be overridden in subclasses to customize any of `DefaultListableBeanFactory`'s settings.

      Overrides:
        `customizeBeanFactory` in class `AbstractRefreshableApplicationContext`
      Parameters:
        `beanFactory` - the newly created bean factory for this context
      See Also:
        `DefaultListableBeanFactory.setAllowBeanDefinitionOverriding(boolean)`, `AbstractAutowireCapableBeanFactory.setAllowCircularReferences(boolean)`, `AbstractAutowireCapableBeanFactory.setAllowRawInjectionDespiteWrapping(boolean)`, `DefaultListableBeanFactory.setAllowEagerClassLoading(boolean)`