The Spring Framework

org.springframework.context.support
Class AbstractRefreshableApplicationContext

java.lang.Object
  extended by org.springframework.core.io.DefaultResourceLoader
      extended by org.springframework.context.support.AbstractApplicationContext
          extended by org.springframework.context.support.AbstractRefreshableApplicationContext
All Implemented Interfaces:
BeanFactory, DisposableBean, HierarchicalBeanFactory, ListableBeanFactory, ApplicationContext, ApplicationEventPublisher, ConfigurableApplicationContext, Lifecycle, MessageSource, ResourceLoader, ResourcePatternResolver
Direct Known Subclasses:
AbstractRefreshablePortletApplicationContext, AbstractRefreshableWebApplicationContext, AbstractXmlApplicationContext

public abstract class AbstractRefreshableApplicationContext
extends AbstractApplicationContext

Base class for ApplicationContext implementations which are supposed to support multiple refreshs, creating a new internal bean factory instance every time. Typically (but not necessarily), such a context will be driven by a set of config locations to load bean definitions from.

The only method to be implemented by subclasses is loadBeanDefinitions(org.springframework.beans.factory.support.DefaultListableBeanFactory), which gets invoked on each refresh. A concrete implementation is supposed to load bean definitions into the given DefaultListableBeanFactory, typically delegating to one or more specific bean definition readers.

Note that there is a similar base class for WebApplicationContexts. AbstractRefreshableWebApplicationContext provides the same subclassing strategy, but additionally pre-implements all context functionality for web environments. There is also a pre-defined way to receive config locations for a web context.

Concrete standalone subclasses of this base class, reading in a specific bean definition format, are ClassPathXmlApplicationContext and FileSystemXmlApplicationContext, which both derive from the common AbstractXmlApplicationContext base class.

Since:
1.1.3
Author:
Juergen Hoeller
See Also:
loadBeanDefinitions(org.springframework.beans.factory.support.DefaultListableBeanFactory), DefaultListableBeanFactory, AbstractRefreshableWebApplicationContext, AbstractXmlApplicationContext, ClassPathXmlApplicationContext, FileSystemXmlApplicationContext

Field Summary
 
Fields inherited from class org.springframework.context.support.AbstractApplicationContext
APPLICATION_EVENT_MULTICASTER_BEAN_NAME, logger, MESSAGE_SOURCE_BEAN_NAME
 
Fields inherited from interface org.springframework.beans.factory.BeanFactory
FACTORY_BEAN_PREFIX
 
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
AbstractRefreshableApplicationContext()
          Create a new AbstractRefreshableApplicationContext with no parent.
AbstractRefreshableApplicationContext(ApplicationContext parent)
          Create a new AbstractRefreshableApplicationContext with the given parent context.
 
Method Summary
protected  void closeBeanFactory()
          Subclasses must implement this method to release their internal bean factory.
protected  DefaultListableBeanFactory createBeanFactory()
          Create an internal bean factory for this context.
protected  void customizeBeanFactory(DefaultListableBeanFactory beanFactory)
          Customize the internal bean factory used by this context.
 ConfigurableListableBeanFactory getBeanFactory()
          Subclasses must return their internal bean factory here.
protected abstract  void loadBeanDefinitions(DefaultListableBeanFactory beanFactory)
          Load bean definitions into the given bean factory, typically through delegating to one or more bean definition readers.
protected  void refreshBeanFactory()
          Subclasses must implement this method to perform the actual configuration load.
 
Methods inherited from class org.springframework.context.support.AbstractApplicationContext
addApplicationListener, addBeanFactoryPostProcessor, addListener, cancelRefresh, close, containsBean, containsBeanDefinition, containsLocalBean, destroy, destroyBeans, doClose, finishRefresh, getAliases, getApplicationListeners, getAutowireCapableBeanFactory, getBean, getBean, getBeanDefinitionCount, getBeanDefinitionNames, getBeanFactoryPostProcessors, getBeanNamesForType, getBeanNamesForType, getBeansOfType, getBeansOfType, getDisplayName, getInternalParentBeanFactory, getInternalParentMessageSource, getLifecycleBeans, getMessage, getMessage, getMessage, getParent, getParentBeanFactory, getResourcePatternResolver, getResources, getStartupDate, getType, initApplicationEventMulticaster, initMessageSource, invokeBeanFactoryPostProcessors, isActive, isPrototype, isRunning, isSingleton, isTypeMatch, obtainFreshBeanFactory, onClose, onRefresh, postProcessBeanFactory, prepareBeanFactory, prepareRefresh, publishEvent, refresh, registerBeanPostProcessors, registerListeners, registerShutdownHook, setDisplayName, setParent, start, stop, toString
 
Methods inherited from class org.springframework.core.io.DefaultResourceLoader
getClassLoader, getResource, getResourceByPath, setClassLoader
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 
Methods inherited from interface org.springframework.core.io.ResourceLoader
getClassLoader, getResource
 

Constructor Detail

AbstractRefreshableApplicationContext

public AbstractRefreshableApplicationContext()
Create a new AbstractRefreshableApplicationContext with no parent.


AbstractRefreshableApplicationContext

public AbstractRefreshableApplicationContext(ApplicationContext parent)
Create a new AbstractRefreshableApplicationContext with the given parent context.

Parameters:
parent - the parent context
Method Detail

refreshBeanFactory

protected final void refreshBeanFactory()
                                 throws BeansException
Description copied from class: AbstractApplicationContext
Subclasses must implement this method to perform the actual configuration load. The method is invoked by AbstractApplicationContext.refresh() before any other initialization work.

A subclass will either create a new bean factory and hold a reference to it, or return a single BeanFactory instance that it holds. In the latter case, it will usually throw an IllegalStateException if refreshing the context more than once.

Specified by:
refreshBeanFactory in class AbstractApplicationContext
Throws:
BeansException - if initialization of the bean factory failed

closeBeanFactory

protected final void closeBeanFactory()
Description copied from class: AbstractApplicationContext
Subclasses must implement this method to release their internal bean factory. This method gets invoked by AbstractApplicationContext.close() after all other shutdown work.

Should never throw an exception but rather log shutdown failures.

Specified by:
closeBeanFactory in class AbstractApplicationContext

getBeanFactory

public final ConfigurableListableBeanFactory getBeanFactory()
Description copied from class: AbstractApplicationContext
Subclasses must return their internal bean factory here. They should implement the lookup efficiently, so that it can be called repeatedly without a performance penalty.

Note: Subclasses should check whether the context is still active before returning the internal bean factory. The internal factory should generally be considered unavailable once the context has been closed.

Specified by:
getBeanFactory in interface ConfigurableApplicationContext
Specified by:
getBeanFactory in class AbstractApplicationContext
Returns:
this application context's internal bean factory (never null)
See Also:
AbstractApplicationContext.refreshBeanFactory(), AbstractApplicationContext.closeBeanFactory()

createBeanFactory

protected DefaultListableBeanFactory createBeanFactory()
Create an internal bean factory for this context. Called for each AbstractApplicationContext.refresh() attempt.

The default implementation creates a DefaultListableBeanFactory with the internal bean factory of this context's parent as parent bean factory. Can be overridden in subclasses, for example to customize DefaultListableBeanFactory's settings.

Returns:
the bean factory for this context
See Also:
DefaultListableBeanFactory.setAllowBeanDefinitionOverriding(boolean), DefaultListableBeanFactory.setAllowEagerClassLoading(boolean), AbstractAutowireCapableBeanFactory.setAllowCircularReferences(boolean), AbstractAutowireCapableBeanFactory.setAllowRawInjectionDespiteWrapping(boolean)

customizeBeanFactory

protected void customizeBeanFactory(DefaultListableBeanFactory beanFactory)
Customize the internal bean factory used by this context. Called for each AbstractApplicationContext.refresh() attempt.

The default implementation is empty. Can be overridden in subclasses to customize DefaultListableBeanFactory's standard settings.

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

loadBeanDefinitions

protected abstract void loadBeanDefinitions(DefaultListableBeanFactory beanFactory)
                                     throws IOException,
                                            BeansException
Load bean definitions into the given bean factory, typically through delegating to one or more bean definition readers.

Parameters:
beanFactory - the bean factory to load bean definitions into
Throws:
IOException - if loading of bean definition files failed
BeansException - if parsing of the bean definitions failed
See Also:
PropertiesBeanDefinitionReader, XmlBeanDefinitionReader

The Spring Framework

Copyright © 2002-2007 The Spring Framework.