org.springframework.context.support
Class GenericApplicationContext
java.lang.Objectorg.springframework.core.io.DefaultResourceLoader
org.springframework.context.support.AbstractApplicationContext
org.springframework.context.support.GenericApplicationContext
- All Implemented Interfaces:
- BeanFactory, DisposableBean, HierarchicalBeanFactory, ListableBeanFactory, BeanDefinitionRegistry, ApplicationContext, ApplicationEventPublisher, ConfigurableApplicationContext, Lifecycle, MessageSource, AliasRegistry, ResourceLoader, ResourcePatternResolver
- Direct Known Subclasses:
- GenericWebApplicationContext, ResourceAdapterApplicationContext, StaticApplicationContext
public class GenericApplicationContext
- extends AbstractApplicationContext
- implements BeanDefinitionRegistry
- extends AbstractApplicationContext
Generic ApplicationContext implementation that holds a single internal
DefaultListableBeanFactory
instance and does not assume a specific bean definition format. Implements
the BeanDefinitionRegistry
interface in order to allow for applying any bean definition readers to it.
Typical usage is to register a variety of bean definitions via the
BeanDefinitionRegistry
interface and then call AbstractApplicationContext.refresh() to initialize those beans
with application context semantics (handling
ApplicationContextAware, auto-detecting
BeanFactoryPostProcessors,
etc).
In contrast to other ApplicationContext implementations that create a new
internal BeanFactory instance for each refresh, the internal BeanFactory of
this context is available right from the start, to be able to register bean
definitions on it. AbstractApplicationContext.refresh() may only be called once.
Usage example:
GenericApplicationContext ctx = new GenericApplicationContext();
XmlBeanDefinitionReader xmlReader = new XmlBeanDefinitionReader(ctx);
xmlReader.loadBeanDefinitions(new ClassPathResource("applicationContext.xml"));
PropertiesBeanDefinitionReader propReader = new PropertiesBeanDefinitionReader(ctx);
propReader.loadBeanDefinitions(new ClassPathResource("otherBeans.properties"));
ctx.refresh();
MyBean myBean = (MyBean) ctx.getBean("myBean");
...
For the typical case of XML bean definitions, simply use
ClassPathXmlApplicationContext or FileSystemXmlApplicationContext,
which are easier to set up - but less flexible, since you can just use standard
resource locations for XML bean definitions, rather than mixing arbitrary bean
definition formats. The equivalent in a web environment is
XmlWebApplicationContext.
For custom application context implementations that are supposed to read
special bean definition formats in a refreshable manner, consider deriving
from the AbstractRefreshableApplicationContext base class.
- Since:
- 1.1.2
- Author:
- Juergen Hoeller
- See Also:
registerBeanDefinition(java.lang.String, org.springframework.beans.factory.config.BeanDefinition),AbstractApplicationContext.refresh(),XmlBeanDefinitionReader,PropertiesBeanDefinitionReader
| 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.context.ConfigurableApplicationContext |
|---|
CONFIG_LOCATION_DELIMITERS, LOAD_TIME_WEAVER_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 | |
|---|---|
GenericApplicationContext()
Create a new GenericApplicationContext. |
|
GenericApplicationContext(ApplicationContext parent)
Create a new GenericApplicationContext with the given parent. |
|
GenericApplicationContext(DefaultListableBeanFactory beanFactory)
Create a new GenericApplicationContext with the given DefaultListableBeanFactory. |
|
GenericApplicationContext(DefaultListableBeanFactory beanFactory,
ApplicationContext parent)
Create a new GenericApplicationContext with the given DefaultListableBeanFactory. |
|
| Method Summary | |
|---|---|
protected void |
closeBeanFactory()
Do nothing: We hold a single internal BeanFactory that will never get released. |
BeanDefinition |
getBeanDefinition(String beanName)
Return the BeanDefinition for the given bean name. |
ConfigurableListableBeanFactory |
getBeanFactory()
Return the single internal BeanFactory held by this context (as ConfigurableListableBeanFactory). |
DefaultListableBeanFactory |
getDefaultListableBeanFactory()
Return the underlying bean factory of this context, available for registering bean definitions. |
Resource |
getResource(String location)
This implementation delegates to this context's ResourceLoader if set, falling back to the default superclass behavior else. |
Resource[] |
getResources(String locationPattern)
This implementation delegates to this context's ResourceLoader if it implements the ResourcePatternResolver interface, falling back to the default superclass behavior else. |
boolean |
isAlias(String beanName)
Determine whether this given name is defines as an alias (as opposed to the name of an actually registered component). |
boolean |
isBeanNameInUse(String beanName)
Determine whether the given bean name is already in use within this registry, i.e. whether there is a local bean or alias registered under this name. |
protected void |
refreshBeanFactory()
Do nothing: We hold a single internal BeanFactory and rely on callers to register beans through our public methods (or the BeanFactory's). |
void |
registerAlias(String beanName,
String alias)
Given a name, register an alias for it. |
void |
registerBeanDefinition(String beanName,
BeanDefinition beanDefinition)
Register a new bean definition with this registry. |
void |
removeAlias(String alias)
Remove the specified alias from this registry. |
void |
removeBeanDefinition(String beanName)
Remove the BeanDefinition for the given name. |
void |
setParent(ApplicationContext parent)
Set the parent of this application context, also setting the parent of the internal BeanFactory accordingly. |
void |
setResourceLoader(ResourceLoader resourceLoader)
Set a ResourceLoader to use for this context. |
| Methods inherited from class org.springframework.core.io.DefaultResourceLoader |
|---|
getClassLoader, 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.beans.factory.support.BeanDefinitionRegistry |
|---|
containsBeanDefinition, getBeanDefinitionCount, getBeanDefinitionNames |
| Methods inherited from interface org.springframework.core.AliasRegistry |
|---|
getAliases |
| Methods inherited from interface org.springframework.core.io.ResourceLoader |
|---|
getClassLoader |
| Constructor Detail |
|---|
GenericApplicationContext
public GenericApplicationContext()
- Create a new GenericApplicationContext.
GenericApplicationContext
public GenericApplicationContext(DefaultListableBeanFactory beanFactory)
- Create a new GenericApplicationContext with the given DefaultListableBeanFactory.
- Parameters:
beanFactory- the DefaultListableBeanFactory instance to use for this context- See Also:
registerBeanDefinition(java.lang.String, org.springframework.beans.factory.config.BeanDefinition),AbstractApplicationContext.refresh()
GenericApplicationContext
public GenericApplicationContext(ApplicationContext parent)
- Create a new GenericApplicationContext with the given parent.
- Parameters:
parent- the parent application context- See Also:
registerBeanDefinition(java.lang.String, org.springframework.beans.factory.config.BeanDefinition),AbstractApplicationContext.refresh()
GenericApplicationContext
public GenericApplicationContext(DefaultListableBeanFactory beanFactory, ApplicationContext parent)
- Create a new GenericApplicationContext with the given DefaultListableBeanFactory.
- Parameters:
beanFactory- the DefaultListableBeanFactory instance to use for this contextparent- the parent application context- See Also:
registerBeanDefinition(java.lang.String, org.springframework.beans.factory.config.BeanDefinition),AbstractApplicationContext.refresh()
| Method Detail |
|---|
setParent
public void setParent(ApplicationContext parent)
- Set the parent of this application context, also setting
the parent of the internal BeanFactory accordingly.
- Specified by:
setParentin interfaceConfigurableApplicationContext- Overrides:
setParentin classAbstractApplicationContext
- Parameters:
parent- the parent context- See Also:
ConfigurableBeanFactory.setParentBeanFactory(org.springframework.beans.factory.BeanFactory)
setResourceLoader
public void setResourceLoader(ResourceLoader resourceLoader)
- Set a ResourceLoader to use for this context. If set, the context will
delegate all
getResourcecalls to the given ResourceLoader. If not set, default resource loading will apply.The main reason to specify a custom ResourceLoader is to resolve resource paths (withour URL prefix) in a specific fashion. The default behavior is to resolve such paths as class path locations. To resolve resource paths as file system locations, specify a FileSystemResourceLoader here.
You can also pass in a full ResourcePatternResolver, which will be autodetected by the context and used for
getResourcescalls as well. Else, default resource pattern matching will apply.
getResource
public Resource getResource(String location)
- This implementation delegates to this context's ResourceLoader if set,
falling back to the default superclass behavior else.
- Specified by:
getResourcein interfaceResourceLoader- Overrides:
getResourcein classDefaultResourceLoader
- Parameters:
location- the resource location- Returns:
- a corresponding Resource handle
- See Also:
setResourceLoader(org.springframework.core.io.ResourceLoader)
getResources
public Resource[] getResources(String locationPattern) throws IOException
- This implementation delegates to this context's ResourceLoader if it
implements the ResourcePatternResolver interface, falling back to the
default superclass behavior else.
- Specified by:
getResourcesin interfaceResourcePatternResolver- Overrides:
getResourcesin classAbstractApplicationContext
- Parameters:
locationPattern- the location pattern to resolve- Returns:
- the corresponding Resource objects
- Throws:
IOException- in case of I/O errors- See Also:
setResourceLoader(org.springframework.core.io.ResourceLoader)
refreshBeanFactory
protected final void refreshBeanFactory()
throws IllegalStateException
- Do nothing: We hold a single internal BeanFactory and rely on callers
to register beans through our public methods (or the BeanFactory's).
- Specified by:
refreshBeanFactoryin classAbstractApplicationContext
- Throws:
IllegalStateException- if already initialized and multiple refresh attempts are not supported- See Also:
registerBeanDefinition(java.lang.String, org.springframework.beans.factory.config.BeanDefinition)
closeBeanFactory
protected final void closeBeanFactory()
- Do nothing: We hold a single internal BeanFactory that will never
get released.
- Specified by:
closeBeanFactoryin classAbstractApplicationContext
getBeanFactory
public final ConfigurableListableBeanFactory getBeanFactory()
- Return the single internal BeanFactory held by this context
(as ConfigurableListableBeanFactory).
- Specified by:
getBeanFactoryin interfaceConfigurableApplicationContext- Specified by:
getBeanFactoryin classAbstractApplicationContext
- Returns:
- this application context's internal bean factory (never
null) - See Also:
AbstractApplicationContext.refreshBeanFactory(),AbstractApplicationContext.closeBeanFactory()
getDefaultListableBeanFactory
public final DefaultListableBeanFactory getDefaultListableBeanFactory()
- Return the underlying bean factory of this context,
available for registering bean definitions.
NOTE: You need to call
AbstractApplicationContext.refresh()to initialize the bean factory and its contained beans with application context semantics (autodetecting BeanFactoryPostProcessors, etc).- Returns:
- the internal bean factory (as DefaultListableBeanFactory)
registerBeanDefinition
public void registerBeanDefinition(String beanName, BeanDefinition beanDefinition) throws BeanDefinitionStoreException
- Description copied from interface:
BeanDefinitionRegistry - Register a new bean definition with this registry.
Must support RootBeanDefinition and ChildBeanDefinition.
- Specified by:
registerBeanDefinitionin interfaceBeanDefinitionRegistry
- Parameters:
beanName- the name of the bean instance to registerbeanDefinition- definition of the bean instance to register- Throws:
BeanDefinitionStoreException- if the BeanDefinition is invalid or if there is already a BeanDefinition for the specified bean name (and we are not allowed to override it)- See Also:
RootBeanDefinition,ChildBeanDefinition
removeBeanDefinition
public void removeBeanDefinition(String beanName) throws NoSuchBeanDefinitionException
- Description copied from interface:
BeanDefinitionRegistry - Remove the BeanDefinition for the given name.
- Specified by:
removeBeanDefinitionin interfaceBeanDefinitionRegistry
- Parameters:
beanName- the name of the bean instance to register- Throws:
NoSuchBeanDefinitionException- if there is no such bean definition
getBeanDefinition
public BeanDefinition getBeanDefinition(String beanName) throws NoSuchBeanDefinitionException
- Description copied from interface:
BeanDefinitionRegistry - Return the BeanDefinition for the given bean name.
- Specified by:
getBeanDefinitionin interfaceBeanDefinitionRegistry
- Parameters:
beanName- name of the bean to find a definition for- Returns:
- the BeanDefinition for the given name (never
null) - Throws:
NoSuchBeanDefinitionException- if there is no such bean definition
isBeanNameInUse
public boolean isBeanNameInUse(String beanName)
- Description copied from interface:
BeanDefinitionRegistry - Determine whether the given bean name is already in use within this registry,
i.e. whether there is a local bean or alias registered under this name.
- Specified by:
isBeanNameInUsein interfaceBeanDefinitionRegistry
- Parameters:
beanName- the name to check- Returns:
- whether the given bean name is already in use
registerAlias
public void registerAlias(String beanName, String alias)
- Description copied from interface:
AliasRegistry - Given a name, register an alias for it.
- Specified by:
registerAliasin interfaceAliasRegistry
- Parameters:
beanName- the canonical namealias- the alias to be registered
removeAlias
public void removeAlias(String alias)
- Description copied from interface:
AliasRegistry - Remove the specified alias from this registry.
- Specified by:
removeAliasin interfaceAliasRegistry
- Parameters:
alias- the alias to remove
isAlias
public boolean isAlias(String beanName)
- Description copied from interface:
AliasRegistry - Determine whether this given name is defines as an alias
(as opposed to the name of an actually registered component).
- Specified by:
isAliasin interfaceAliasRegistry
- Parameters:
beanName- the bean name to check- Returns:
- whether the given name is an alias
