org.springframework.context.support
Class AbstractApplicationContext
java.lang.Objectorg.springframework.core.io.DefaultResourceLoader
org.springframework.context.support.AbstractApplicationContext
- All Implemented Interfaces:
- BeanFactory, DisposableBean, HierarchicalBeanFactory, ListableBeanFactory, ApplicationContext, ApplicationEventPublisher, ConfigurableApplicationContext, Lifecycle, MessageSource, ResourceLoader, ResourcePatternResolver
- Direct Known Subclasses:
- AbstractRefreshableApplicationContext, GenericApplicationContext
public abstract class AbstractApplicationContext
- extends DefaultResourceLoader
- implements ConfigurableApplicationContext, DisposableBean
- extends DefaultResourceLoader
Abstract implementation of the ApplicationContext
interface. Doesn't mandate the type of storage used for configuration; simply
implements common context functionality. Uses the Template Method design pattern,
requiring concrete subclasses to implement abstract methods.
In contrast to a plain BeanFactory, an ApplicationContext is supposed
to detect special beans defined in its internal bean factory:
Therefore, this class automatically registers
BeanFactoryPostProcessors,
BeanPostProcessors
and ApplicationListeners
which are defined as beans in the context.
A MessageSource may also be supplied
as a bean in the context, with the name "messageSource"; otherwise, message
resolution is delegated to the parent context. Furthermore, a multicaster
for application events can be supplied as "applicationEventMulticaster" bean
of type ApplicationEventMulticaster
in the context; otherwise, a default multicaster of type
SimpleApplicationEventMulticaster will be used.
Implements resource loading through extending
DefaultResourceLoader.
Consequently treats non-URL resource paths as class path resources
(supporting full class path resource names that include the package path,
e.g. "mypackage/myresource.dat"), unless the DefaultResourceLoader.getResourceByPath(java.lang.String)
method is overwritten in a subclass.
- Since:
- January 21, 2001
- Author:
- Rod Johnson, Juergen Hoeller, Mark Fisher
- See Also:
refreshBeanFactory(),getBeanFactory(),BeanFactoryPostProcessor,BeanPostProcessor,ApplicationEventMulticaster,ApplicationListener,MessageSource
| Field Summary | |
|---|---|
static String |
APPLICATION_EVENT_MULTICASTER_BEAN_NAME
Name of the ApplicationEventMulticaster bean in the factory. |
protected Log |
logger
Logger used by this class. |
static String |
MESSAGE_SOURCE_BEAN_NAME
Name of the MessageSource bean in the factory. |
| 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 | |
|---|---|
AbstractApplicationContext()
Create a new AbstractApplicationContext with no parent. |
|
AbstractApplicationContext(ApplicationContext parent)
Create a new AbstractApplicationContext with the given parent context. |
|
| Method Summary | |
|---|---|
void |
addApplicationListener(ApplicationListener listener)
Add a new ApplicationListener that will be notified on context events such as context refresh and context shutdown. |
void |
addBeanFactoryPostProcessor(BeanFactoryPostProcessor beanFactoryPostProcessor)
Add a new BeanFactoryPostProcessor that will get applied to the internal bean factory of this application context on refresh, before any of the bean definitions get evaluated. |
protected void |
addListener(ApplicationListener listener)
Subclasses can invoke this method to register a listener. |
protected void |
cancelRefresh(BeansException ex)
Cancel this context's refresh attempt, resetting the active flag
after an exception got thrown. |
void |
close()
Close this application context, destroying all beans in its bean factory. |
protected abstract void |
closeBeanFactory()
Subclasses must implement this method to release their internal bean factory. |
boolean |
containsBean(String name)
Does this bean factory contain a bean with the given name? |
boolean |
containsBeanDefinition(String name)
Check if this bean factory contains a bean definition with the given name. |
boolean |
containsLocalBean(String name)
Return whether the local bean factory contains a bean of the given name, ignoring beans defined in ancestor contexts. |
void |
destroy()
DisposableBean callback for destruction of this instance. |
protected void |
destroyBeans()
Template method for destroying all beans that this context manages. |
protected void |
doClose()
Actually performs context closing: publishes a ContextClosedEvent and destroys the singletons in the bean factory of this application context. |
protected void |
finishBeanFactoryInitialization(ConfigurableListableBeanFactory beanFactory)
Finish the initialization of this context's bean factory, initializing all remaining singleton beans. |
protected void |
finishRefresh()
Finish the refresh of this context, publishing the ContextRefreshedEvent. |
String[] |
getAliases(String name)
Return the aliases for the given bean name, if any. |
List |
getApplicationListeners()
Return the list of statically specified ApplicationListeners. |
AutowireCapableBeanFactory |
getAutowireCapableBeanFactory()
Return this context's internal bean factory as AutowireCapableBeanFactory, if already available. |
Object |
getBean(String name)
Return an instance, which may be shared or independent, of the specified bean. |
Object |
getBean(String name,
Class requiredType)
Return an instance, which may be shared or independent, of the specified bean. |
Object |
getBean(String name,
Object[] args)
Return an instance, which may be shared or independent, of the specified bean. |
int |
getBeanDefinitionCount()
Return the number of beans defined in the factory. |
String[] |
getBeanDefinitionNames()
Return the names of all beans defined in this factory. |
abstract ConfigurableListableBeanFactory |
getBeanFactory()
Subclasses must return their internal bean factory here. |
List |
getBeanFactoryPostProcessors()
Return the list of BeanFactoryPostProcessors that will get applied to the internal BeanFactory. |
String[] |
getBeanNamesForType(Class type)
Return the names of beans matching the given type (including subclasses), judging from either bean definitions or the value of getObjectType
in the case of FactoryBeans. |
String[] |
getBeanNamesForType(Class type,
boolean includePrototypes,
boolean allowEagerInit)
Return the names of beans matching the given type (including subclasses), judging from either bean definitions or the value of getObjectType
in the case of FactoryBeans. |
Map |
getBeansOfType(Class type)
Return the bean instances that match the given object type (including subclasses), judging from either bean definitions or the value of getObjectType in the case of FactoryBeans. |
Map |
getBeansOfType(Class type,
boolean includePrototypes,
boolean allowEagerInit)
Return the bean instances that match the given object type (including subclasses), judging from either bean definitions or the value of getObjectType in the case of FactoryBeans. |
String |
getDisplayName()
Return a friendly name for this context. |
String |
getId()
Return the unique id of this application context. |
protected BeanFactory |
getInternalParentBeanFactory()
Return the internal bean factory of the parent context if it implements ConfigurableApplicationContext; else, return the parent context itself. |
protected MessageSource |
getInternalParentMessageSource()
Return the internal message source of the parent context if it is an AbstractApplicationContext too; else, return the parent context itself. |
String |
getMessage(MessageSourceResolvable resolvable,
Locale locale)
Try to resolve the message using all the attributes contained within the MessageSourceResolvable argument that was passed in. |
String |
getMessage(String code,
Object[] args,
Locale locale)
Try to resolve the message. |
String |
getMessage(String code,
Object[] args,
String defaultMessage,
Locale locale)
Try to resolve the message. |
ApplicationContext |
getParent()
Return the parent context, or null if there is no parent
(that is, this context is the root of the context hierarchy). |
BeanFactory |
getParentBeanFactory()
Return the parent bean factory, or null if there is none. |
protected ResourcePatternResolver |
getResourcePatternResolver()
Return the ResourcePatternResolver to use for resolving location patterns into Resource instances. |
Resource[] |
getResources(String locationPattern)
Resolve the given location pattern into Resource objects. |
long |
getStartupDate()
Return the timestamp (ms) when this context was first loaded. |
Class |
getType(String name)
Determine the type of the bean with the given name. |
protected void |
initApplicationEventMulticaster()
Initialize the ApplicationEventMulticaster. |
protected void |
initMessageSource()
Initialize the MessageSource. |
protected void |
invokeBeanFactoryPostProcessors(ConfigurableListableBeanFactory beanFactory)
Instantiate and invoke all registered BeanFactoryPostProcessor beans, respecting explicit order if given. |
boolean |
isActive()
Determine whether this application context is active, that is, whether it has been refreshed at least once and has not been closed yet. |
boolean |
isPrototype(String name)
Is this bean a prototype? |
boolean |
isRunning()
Check whether this component is currently running. |
boolean |
isSingleton(String name)
Is this bean a shared singleton? |
boolean |
isTypeMatch(String name,
Class targetType)
Check whether the bean with the given name matches the specified type. |
protected ConfigurableListableBeanFactory |
obtainFreshBeanFactory()
Tell the subclass to refresh the internal bean factory. |
protected void |
onClose()
Template method which can be overridden to add context-specific shutdown work. |
protected void |
onRefresh()
Template method which can be overridden to add context-specific refresh work. |
protected void |
postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory)
Modify the application context's internal bean factory after its standard initialization. |
protected void |
prepareBeanFactory(ConfigurableListableBeanFactory beanFactory)
Configure the factory's standard context characteristics, such as the context's ClassLoader and post-processors. |
protected void |
prepareRefresh()
Prepare this context for refreshing, setting its startup date and active flag. |
void |
publishEvent(ApplicationEvent event)
Publish the given event to all listeners. |
void |
refresh()
Load or refresh the persistent representation of the configuration, which might an XML file, properties file, or relational database schema. |
protected abstract void |
refreshBeanFactory()
Subclasses must implement this method to perform the actual configuration load. |
protected void |
registerBeanPostProcessors(ConfigurableListableBeanFactory beanFactory)
Instantiate and invoke all registered BeanPostProcessor beans, respecting explicit order if given. |
protected void |
registerListeners()
Add beans that implement ApplicationListener as listeners. |
void |
registerShutdownHook()
Register a shutdown hook with the JVM runtime, closing this context on JVM shutdown unless it has already been closed at that time. |
void |
setDisplayName(String displayName)
Set a friendly name for this context. |
void |
setId(String id)
Set the unique id of this application context. |
void |
setParent(ApplicationContext parent)
Set the parent of this application context. |
void |
start()
Start this component. |
void |
stop()
Stop this component. |
String |
toString()
Return information about this context. |
| 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 |
| Field Detail |
|---|
MESSAGE_SOURCE_BEAN_NAME
public static final String MESSAGE_SOURCE_BEAN_NAME
- Name of the MessageSource bean in the factory.
If none is supplied, message resolution is delegated to the parent.
- See Also:
MessageSource, Constant Field Values
APPLICATION_EVENT_MULTICASTER_BEAN_NAME
public static final String APPLICATION_EVENT_MULTICASTER_BEAN_NAME
- Name of the ApplicationEventMulticaster bean in the factory.
If none is supplied, a default SimpleApplicationEventMulticaster is used.
logger
protected final Log logger
- Logger used by this class. Available to subclasses.
| Constructor Detail |
|---|
AbstractApplicationContext
public AbstractApplicationContext()
- Create a new AbstractApplicationContext with no parent.
AbstractApplicationContext
public AbstractApplicationContext(ApplicationContext parent)
- Create a new AbstractApplicationContext with the given parent context.
- Parameters:
parent- the parent context
| Method Detail |
|---|
setId
public void setId(String id)
- Set the unique id of this application context.
Default is the object id of the context instance, or the name of the context bean if the context is itself defined as a bean.
- Parameters:
id- the unique id of the context
getId
public String getId()
- Description copied from interface:
ApplicationContext - Return the unique id of this application context.
- Specified by:
getIdin interfaceApplicationContext
- Returns:
- the unique id of the context
getParent
public ApplicationContext getParent()
- Return the parent context, or
nullif there is no parent (that is, this context is the root of the context hierarchy).- Specified by:
getParentin interfaceApplicationContext
- Returns:
- the parent context, or
nullif there is no parent
getAutowireCapableBeanFactory
public AutowireCapableBeanFactory getAutowireCapableBeanFactory() throws IllegalStateException
- Return this context's internal bean factory as AutowireCapableBeanFactory,
if already available.
- Specified by:
getAutowireCapableBeanFactoryin interfaceApplicationContext
- Returns:
- the AutowireCapableBeanFactory for this context
- Throws:
IllegalStateException- if the context does not support the AutowireCapableBeanFactory interface or does not hold an autowire-capable bean factory yet (usually ifrefresh()has never been called)- See Also:
getBeanFactory()
setDisplayName
public void setDisplayName(String displayName)
- Set a friendly name for this context.
Typically done during initialization of concrete context implementations.
getDisplayName
public String getDisplayName()
- Return a friendly name for this context.
- Specified by:
getDisplayNamein interfaceApplicationContext
- Returns:
- a display name for this context
getStartupDate
public long getStartupDate()
- Return the timestamp (ms) when this context was first loaded.
- Specified by:
getStartupDatein interfaceApplicationContext
- Returns:
- the timestamp (ms) when this context was first loaded
publishEvent
public void publishEvent(ApplicationEvent event)
- Publish the given event to all listeners.
Note: Listeners get initialized after the MessageSource, to be able to access it within listener implementations. Thus, MessageSource implementations cannot publish events.
- Specified by:
publishEventin interfaceApplicationEventPublisher
- Parameters:
event- the event to publish (may be application-specific or a standard framework event)- See Also:
RequestHandledEvent
getResourcePatternResolver
protected ResourcePatternResolver getResourcePatternResolver()
- Return the ResourcePatternResolver to use for resolving location patterns
into Resource instances. Default is a
PathMatchingResourcePatternResolver, supporting Ant-style location patterns.Can be overridden in subclasses, for extended resolution strategies, for example in a web environment.
Do not call this when needing to resolve a location pattern. Call the context's
getResourcesmethod instead, which will delegate to the ResourcePatternResolver.- Returns:
- the ResourcePatternResolver for this context
- See Also:
getResources(java.lang.String),PathMatchingResourcePatternResolver
setParent
public void setParent(ApplicationContext parent)
- Description copied from interface:
ConfigurableApplicationContext - 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.
- Specified by:
setParentin interfaceConfigurableApplicationContext
- Parameters:
parent- the parent context- See Also:
ConfigurableWebApplicationContext
addBeanFactoryPostProcessor
public void addBeanFactoryPostProcessor(BeanFactoryPostProcessor beanFactoryPostProcessor)
- Description copied from interface:
ConfigurableApplicationContext - Add a new BeanFactoryPostProcessor that will get applied to the internal
bean factory of this application context on refresh, before any of the
bean definitions get evaluated. To be invoked during context configuration.
- Specified by:
addBeanFactoryPostProcessorin interfaceConfigurableApplicationContext
- Parameters:
beanFactoryPostProcessor- the factory processor to register
getBeanFactoryPostProcessors
public List getBeanFactoryPostProcessors()
- Return the list of BeanFactoryPostProcessors that will get applied
to the internal BeanFactory.
- See Also:
BeanFactoryPostProcessor
addApplicationListener
public void addApplicationListener(ApplicationListener listener)
- Description copied from interface:
ConfigurableApplicationContext - Add a new ApplicationListener that will be notified on context events
such as context refresh and context shutdown.
Note that any ApplicationListener registered here will be applied on refresh of this context. If a listener is added after the initial refresh, it will be applied on next refresh of the context.
- Specified by:
addApplicationListenerin interfaceConfigurableApplicationContext
- Parameters:
listener- the ApplicationListener to register- See Also:
ContextRefreshedEvent,ContextClosedEvent
getApplicationListeners
public List getApplicationListeners()
- Return the list of statically specified ApplicationListeners.
- See Also:
ApplicationListener
refresh
public void refresh()
throws BeansException,
IllegalStateException
- Description copied from interface:
ConfigurableApplicationContext - Load or refresh the persistent representation of the configuration,
which might an XML file, properties file, or relational database schema.
As this is a startup method, it should destroy already created singletons if it fails, to avoid dangling resources. In other words, after invocation of that method, either all or no singletons at all should be instantiated.
- Specified by:
refreshin interfaceConfigurableApplicationContext
- Throws:
BeansException- if the bean factory could not be initializedIllegalStateException- if already initialized and multiple refresh attempts are not supported
prepareRefresh
protected void prepareRefresh()
- Prepare this context for refreshing, setting its startup date and
active flag.
obtainFreshBeanFactory
protected ConfigurableListableBeanFactory obtainFreshBeanFactory()
- Tell the subclass to refresh the internal bean factory.
- Returns:
- the fresh BeanFactory instance
- See Also:
refreshBeanFactory(),getBeanFactory()
prepareBeanFactory
protected void prepareBeanFactory(ConfigurableListableBeanFactory beanFactory)
- Configure the factory's standard context characteristics,
such as the context's ClassLoader and post-processors.
- Parameters:
beanFactory- the BeanFactory to configure
postProcessBeanFactory
protected void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory)
- Modify the application context's internal bean factory after its standard
initialization. All bean definitions will have been loaded, but no beans
will have been instantiated yet. This allows for registering special
BeanPostProcessors etc in certain ApplicationContext implementations.
- Parameters:
beanFactory- the bean factory used by the application context
invokeBeanFactoryPostProcessors
protected void invokeBeanFactoryPostProcessors(ConfigurableListableBeanFactory beanFactory)
- Instantiate and invoke all registered BeanFactoryPostProcessor beans,
respecting explicit order if given.
Must be called before singleton instantiation.
registerBeanPostProcessors
protected void registerBeanPostProcessors(ConfigurableListableBeanFactory beanFactory)
- Instantiate and invoke all registered BeanPostProcessor beans,
respecting explicit order if given.
Must be called before any instantiation of application beans.
initMessageSource
protected void initMessageSource()
- Initialize the MessageSource.
Use parent's if none defined in this context.
initApplicationEventMulticaster
protected void initApplicationEventMulticaster()
- Initialize the ApplicationEventMulticaster.
Uses SimpleApplicationEventMulticaster if none defined in the context.
- See Also:
SimpleApplicationEventMulticaster
onRefresh
protected void onRefresh()
throws BeansException
- Template method which can be overridden to add context-specific refresh work.
Called on initialization of special beans, before instantiation of singletons.
This implementation is empty.
- Throws:
BeansException- in case of errors- See Also:
refresh()
registerListeners
protected void registerListeners()
- Add beans that implement ApplicationListener as listeners.
Doesn't affect other listeners, which can be added without being beans.
addListener
protected void addListener(ApplicationListener listener)
- Subclasses can invoke this method to register a listener.
Any beans in the context that are listeners are automatically added.
- Parameters:
listener- the listener to register
finishBeanFactoryInitialization
protected void finishBeanFactoryInitialization(ConfigurableListableBeanFactory beanFactory)
- Finish the initialization of this context's bean factory,
initializing all remaining singleton beans.
finishRefresh
protected void finishRefresh()
- Finish the refresh of this context, publishing the
ContextRefreshedEvent.
cancelRefresh
protected void cancelRefresh(BeansException ex)
- Cancel this context's refresh attempt, resetting the
activeflag after an exception got thrown.- Parameters:
ex- the exception that led to the cancellation
registerShutdownHook
public void registerShutdownHook()
- Register a shutdown hook with the JVM runtime, closing this context
on JVM shutdown unless it has already been closed at that time.
Delegates to
doClose()for the actual closing procedure.- Specified by:
registerShutdownHookin interfaceConfigurableApplicationContext
destroy
public void destroy()
- DisposableBean callback for destruction of this instance.
Only called when the ApplicationContext itself is running
as a bean in another BeanFactory or ApplicationContext,
which is rather unusual.
The
closemethod is the native way to shut down an ApplicationContext.- Specified by:
destroyin interfaceDisposableBean
- See Also:
close(),SingletonBeanFactoryLocator
close
public void close()
- Close this application context, destroying all beans in its bean factory.
Delegates to
doClose()for the actual closing procedure. Also removes a JVM shutdown hook, if registered, as it's not needed anymore.- Specified by:
closein interfaceConfigurableApplicationContext
- See Also:
doClose(),registerShutdownHook()
doClose
protected void doClose()
- Actually performs context closing: publishes a ContextClosedEvent and
destroys the singletons in the bean factory of this application context.
Called by both
close()and a JVM shutdown hook, if any.
destroyBeans
protected void destroyBeans()
- Template method for destroying all beans that this context manages.
The default implementation destroy all cached singletons in this context,
invoking
DisposableBean.destroy()and/or the specified "destroy-method".Can be overridden to add context-specific bean destruction steps right before or right after standard singleton destruction, while the context's BeanFactory is still active.
onClose
protected void onClose()
- Template method which can be overridden to add context-specific shutdown work.
The default implementation is empty.
Called at the end of
doClose()'s shutdown procedure, after this context's BeanFactory has been closed. If custom shutdown logic needs to execute while the BeanFactory is still active, override thedestroyBeans()method instead.
isActive
public boolean isActive()
- Description copied from interface:
ConfigurableApplicationContext - Determine whether this application context is active, that is,
whether it has been refreshed at least once and has not been closed yet.
- Specified by:
isActivein interfaceConfigurableApplicationContext
- Returns:
- whether the context is still active
- See Also:
ConfigurableApplicationContext.refresh(),ConfigurableApplicationContext.close(),ConfigurableApplicationContext.getBeanFactory()
getBean
public Object getBean(String name) throws BeansException
- Description copied from interface:
BeanFactory - Return an instance, which may be shared or independent, of the specified bean.
This method allows a Spring BeanFactory to be used as a replacement for the Singleton or Prototype design pattern. Callers may retain references to returned objects in the case of Singleton beans.
Translates aliases back to the corresponding canonical bean name. Will ask the parent factory if the bean cannot be found in this factory instance.
- Specified by:
getBeanin interfaceBeanFactory
- Parameters:
name- the name of the bean to retrieve- Returns:
- an instance of the bean
- Throws:
NoSuchBeanDefinitionException- if there is no bean definition with the specified nameBeansException- if the bean could not be obtained
getBean
public Object getBean(String name, Class requiredType) throws BeansException
- Description copied from interface:
BeanFactory - Return an instance, which may be shared or independent, of the specified bean.
Behaves the same as
BeanFactory.getBean(String), but provides a measure of type safety by throwing a BeanNotOfRequiredTypeException if the bean is not of the required type. This means that ClassCastException can't be thrown on casting the result correctly, as can happen withBeanFactory.getBean(String).Translates aliases back to the corresponding canonical bean name. Will ask the parent factory if the bean cannot be found in this factory instance.
- Specified by:
getBeanin interfaceBeanFactory
- Parameters:
name- the name of the bean to retrieverequiredType- type the bean must match. Can be an interface or superclass of the actual class, ornullfor any match. For example, if the value isObject.class, this method will succeed whatever the class of the returned instance.- Returns:
- an instance of the bean
- Throws:
NoSuchBeanDefinitionException- if there's no such bean definitionBeanNotOfRequiredTypeException- if the bean is not of the required typeBeansException- if the bean could not be created
getBean
public Object getBean(String name, Object[] args) throws BeansException
- Description copied from interface:
BeanFactory - Return an instance, which may be shared or independent, of the specified bean.
Allows for specifying explicit constructor arguments / factory method arguments, overriding the specified default arguments (if any) in the bean definition.
- Specified by:
getBeanin interfaceBeanFactory
- Parameters:
name- the name of the bean to retrieveargs- arguments to use if creating a prototype using explicit arguments to a static factory method. It is invalid to use a non-null args value in any other case.- Returns:
- an instance of the bean
- Throws:
NoSuchBeanDefinitionException- if there's no such bean definitionBeanDefinitionStoreException- if arguments have been given but the affected bean isn't a prototypeBeansException- if the bean could not be created
containsBean
public boolean containsBean(String name)
- Description copied from interface:
BeanFactory - Does this bean factory contain a bean with the given name? More specifically,
is
BeanFactory.getBean(java.lang.String)able to obtain a bean instance for the given name?Translates aliases back to the corresponding canonical bean name. Will ask the parent factory if the bean cannot be found in this factory instance.
- Specified by:
containsBeanin interfaceBeanFactory
- Parameters:
name- the name of the bean to query- Returns:
- whether a bean with the given name is defined
isSingleton
public boolean isSingleton(String name) throws NoSuchBeanDefinitionException
- Description copied from interface:
BeanFactory - Is this bean a shared singleton? That is, will
BeanFactory.getBean(java.lang.String)always return the same instance?Note: This method returning
falsedoes not clearly indicate independent instances. It indicates non-singleton instances, which may correspond to a scoped bean as well. Use theBeanFactory.isPrototype(java.lang.String)operation to explicitly check for independent instances.Translates aliases back to the corresponding canonical bean name. Will ask the parent factory if the bean cannot be found in this factory instance.
- Specified by:
isSingletonin interfaceBeanFactory
- Parameters:
name- the name of the bean to query- Returns:
- whether this bean corresponds to a singleton instance
- Throws:
NoSuchBeanDefinitionException- if there is no bean with the given name- See Also:
BeanFactory.getBean(java.lang.String),BeanFactory.isPrototype(java.lang.String)
isPrototype
public boolean isPrototype(String name) throws NoSuchBeanDefinitionException
- Description copied from interface:
BeanFactory - Is this bean a prototype? That is, will
BeanFactory.getBean(java.lang.String)always return independent instances?Note: This method returning
falsedoes not clearly indicate a singleton object. It indicates non-independent instances, which may correspond to a scoped bean as well. Use theBeanFactory.isSingleton(java.lang.String)operation to explicitly check for a shared singleton instance.Translates aliases back to the corresponding canonical bean name. Will ask the parent factory if the bean cannot be found in this factory instance.
- Specified by:
isPrototypein interfaceBeanFactory
- Parameters:
name- the name of the bean to query- Returns:
- whether this bean will always deliver independent instances
- Throws:
NoSuchBeanDefinitionException- if there is no bean with the given name- See Also:
BeanFactory.getBean(java.lang.String),BeanFactory.isSingleton(java.lang.String)
isTypeMatch
public boolean isTypeMatch(String name, Class targetType) throws NoSuchBeanDefinitionException
- Description copied from interface:
BeanFactory - Check whether the bean with the given name matches the specified type.
More specifically, check whether a
BeanFactory.getBean(java.lang.String)call for the given name would return an object that is assignable to the specified target type.Translates aliases back to the corresponding canonical bean name. Will ask the parent factory if the bean cannot be found in this factory instance.
- Specified by:
isTypeMatchin interfaceBeanFactory
- Parameters:
name- the name of the bean to querytargetType- the type to match against- Returns:
trueif the bean type matches,falseif it doesn't match or cannot be determined yet- Throws:
NoSuchBeanDefinitionException- if there is no bean with the given name- See Also:
BeanFactory.getBean(java.lang.String),BeanFactory.getType(java.lang.String)
getType
public Class getType(String name) throws NoSuchBeanDefinitionException
- Description copied from interface:
BeanFactory - Determine the type of the bean with the given name. More specifically,
determine the type of object that
BeanFactory.getBean(java.lang.String)would return for the given name.For a
FactoryBean, return the type of object that the FactoryBean creates, as exposed byFactoryBean.getObjectType().Translates aliases back to the corresponding canonical bean name. Will ask the parent factory if the bean cannot be found in this factory instance.
- Specified by:
getTypein interfaceBeanFactory
- Parameters:
name- the name of the bean to query- Returns:
- the type of the bean, or
nullif not determinable - Throws:
NoSuchBeanDefinitionException- if there is no bean with the given name- See Also:
BeanFactory.getBean(java.lang.String),BeanFactory.isTypeMatch(java.lang.String, java.lang.Class)
getAliases
public String[] getAliases(String name)
- Description copied from interface:
BeanFactory - Return the aliases for the given bean name, if any.
All of those aliases point to the same bean when used in a
BeanFactory.getBean(java.lang.String)call.If the given name is an alias, the corresponding original bean name and other aliases (if any) will be returned, with the original bean name being the first element in the array.
Will ask the parent factory if the bean cannot be found in this factory instance.
- Specified by:
getAliasesin interfaceBeanFactory
- Parameters:
name- the bean name to check for aliases- Returns:
- the aliases, or an empty array if none
- See Also:
BeanFactory.getBean(java.lang.String)
containsBeanDefinition
public boolean containsBeanDefinition(String name)
- Description copied from interface:
ListableBeanFactory - Check if this bean factory contains a bean definition with the given name.
Does not consider any hierarchy this factory may participate in, and ignores any singleton beans that have been registered by other means than bean definitions.
- Specified by:
containsBeanDefinitionin interfaceListableBeanFactory
- Parameters:
name- the name of the bean to look for- Returns:
- if this bean factory contains a bean definition with the given name
- See Also:
BeanFactory.containsBean(java.lang.String)
getBeanDefinitionCount
public int getBeanDefinitionCount()
- Description copied from interface:
ListableBeanFactory - Return the number of beans defined in the factory.
Does not consider any hierarchy this factory may participate in, and ignores any singleton beans that have been registered by other means than bean definitions.
- Specified by:
getBeanDefinitionCountin interfaceListableBeanFactory
- Returns:
- the number of beans defined in the factory
getBeanDefinitionNames
public String[] getBeanDefinitionNames()
- Description copied from interface:
ListableBeanFactory - Return the names of all beans defined in this factory.
Does not consider any hierarchy this factory may participate in, and ignores any singleton beans that have been registered by other means than bean definitions.
- Specified by:
getBeanDefinitionNamesin interfaceListableBeanFactory
- Returns:
- the names of all beans defined in this factory, or an empty array if none defined
getBeanNamesForType
public String[] getBeanNamesForType(Class type)
- Description copied from interface:
ListableBeanFactory - Return the names of beans matching the given type (including subclasses),
judging from either bean definitions or the value of
getObjectTypein the case of FactoryBeans.NOTE: This method introspects top-level beans only. It does not check nested beans which might match the specified type as well.
Does consider objects created by FactoryBeans, which means that FactoryBeans will get initialized. If the object created by the FactoryBean doesn't match, the raw FactoryBean itself will be matched against the type.
Does not consider any hierarchy this factory may participate in. Use BeanFactoryUtils'
beanNamesForTypeIncludingAncestorsto include beans in ancestor factories too.Note: Does not ignore singleton beans that have been registered by other means than bean definitions.
This version of
getBeanNamesForTypematches all kinds of beans, be it singletons, prototypes, or FactoryBeans. In most implementations, the result will be the same as forgetBeanNamesOfType(type, true, true).Bean names returned by this method should always return bean names in the order of definition in the backend configuration, as far as possible.
- Specified by:
getBeanNamesForTypein interfaceListableBeanFactory
- Parameters:
type- the class or interface to match, ornullfor all bean names- Returns:
- the names of beans (or objects created by FactoryBeans) matching the given object type (including subclasses), or an empty array if none
- See Also:
FactoryBean.getObjectType(),BeanFactoryUtils.beanNamesForTypeIncludingAncestors(ListableBeanFactory, Class)
getBeanNamesForType
public String[] getBeanNamesForType(Class type, boolean includePrototypes, boolean allowEagerInit)
- Description copied from interface:
ListableBeanFactory - Return the names of beans matching the given type (including subclasses),
judging from either bean definitions or the value of
getObjectTypein the case of FactoryBeans.NOTE: This method introspects top-level beans only. It does not check nested beans which might match the specified type as well.
Does consider objects created by FactoryBeans if the "allowEagerInit" flag is set, which means that FactoryBeans will get initialized. If the object created by the FactoryBean doesn't match, the raw FactoryBean itself will be matched against the type. If "allowEagerInit" is not set, only raw FactoryBeans will be checked (which doesn't require initialization of each FactoryBean). $ *
Does not consider any hierarchy this factory may participate in. Use BeanFactoryUtils'
beanNamesForTypeIncludingAncestorsto include beans in ancestor factories too.Note: Does not ignore singleton beans that have been registered by other means than bean definitions.
Bean names returned by this method should always return bean names in the order of definition in the backend configuration, as far as possible.
- Specified by:
getBeanNamesForTypein interfaceListableBeanFactory
- Parameters:
type- the class or interface to match, ornullfor all bean namesincludePrototypes- whether to include prototype or scoped beans too or just singletons (also applies to FactoryBeans)allowEagerInit- whether to initialize lazy-init singletons and objects created by FactoryBeans (or by factory methods with a "factory-bean" reference) for the type check. Note that FactoryBeans need to be eagerly initialized to determine their type: So be aware that passing in "true" for this flag will initialize FactoryBeans and "factory-bean" references.- Returns:
- the names of beans (or objects created by FactoryBeans) matching the given object type (including subclasses), or an empty array if none
- See Also:
FactoryBean.getObjectType(),BeanFactoryUtils.beanNamesForTypeIncludingAncestors(ListableBeanFactory, Class, boolean, boolean)
getBeansOfType
public Map getBeansOfType(Class type) throws BeansException
- Description copied from interface:
ListableBeanFactory - Return the bean instances that match the given object type (including
subclasses), judging from either bean definitions or the value of
getObjectTypein the case of FactoryBeans.NOTE: This method introspects top-level beans only. It does not check nested beans which might match the specified type as well.
Does consider objects created by FactoryBeans, which means that FactoryBeans will get initialized. If the object created by the FactoryBean doesn't match, the raw FactoryBean itself will be matched against the type.
Does not consider any hierarchy this factory may participate in. Use BeanFactoryUtils'
beansOfTypeIncludingAncestorsto include beans in ancestor factories too.Note: Does not ignore singleton beans that have been registered by other means than bean definitions.
This version of getBeansOfType matches all kinds of beans, be it singletons, prototypes, or FactoryBeans. In most implementations, the result will be the same as for
getBeansOfType(type, true, true).The Map returned by this method should always return bean names and corresponding bean instances in the order of definition in the backend configuration, as far as possible.
- Specified by:
getBeansOfTypein interfaceListableBeanFactory
- Parameters:
type- the class or interface to match, ornullfor all concrete beans- Returns:
- a Map with the matching beans, containing the bean names as keys and the corresponding bean instances as values
- Throws:
BeansException- if a bean could not be created- See Also:
FactoryBean.getObjectType(),BeanFactoryUtils.beansOfTypeIncludingAncestors(ListableBeanFactory, Class)
getBeansOfType
public Map getBeansOfType(Class type, boolean includePrototypes, boolean allowEagerInit) throws BeansException
- Description copied from interface:
ListableBeanFactory - Return the bean instances that match the given object type (including
subclasses), judging from either bean definitions or the value of
getObjectTypein the case of FactoryBeans.NOTE: This method introspects top-level beans only. It does not check nested beans which might match the specified type as well.
Does consider objects created by FactoryBeans if the "allowEagerInit" flag is set, which means that FactoryBeans will get initialized. If the object created by the FactoryBean doesn't match, the raw FactoryBean itself will be matched against the type. If "allowEagerInit" is not set, only raw FactoryBeans will be checked (which doesn't require initialization of each FactoryBean).
Does not consider any hierarchy this factory may participate in. Use BeanFactoryUtils'
beansOfTypeIncludingAncestorsto include beans in ancestor factories too.Note: Does not ignore singleton beans that have been registered by other means than bean definitions.
The Map returned by this method should always return bean names and corresponding bean instances in the order of definition in the backend configuration, as far as possible.
- Specified by:
getBeansOfTypein interfaceListableBeanFactory
- Parameters:
type- the class or interface to match, ornullfor all concrete beansincludePrototypes- whether to include prototype or scoped beans too or just singletons (also applies to FactoryBeans)allowEagerInit- whether to initialize lazy-init singletons and objects created by FactoryBeans (or by factory methods with a "factory-bean" reference) for the type check. Note that FactoryBeans need to be eagerly initialized to determine their type: So be aware that passing in "true" for this flag will initialize FactoryBeans and "factory-bean" references.- Returns:
- a Map with the matching beans, containing the bean names as keys and the corresponding bean instances as values
- Throws:
BeansException- if a bean could not be created- See Also:
FactoryBean.getObjectType(),BeanFactoryUtils.beansOfTypeIncludingAncestors(ListableBeanFactory, Class, boolean, boolean)
getParentBeanFactory
public BeanFactory getParentBeanFactory()
- Description copied from interface:
HierarchicalBeanFactory - Return the parent bean factory, or
nullif there is none.- Specified by:
getParentBeanFactoryin interfaceHierarchicalBeanFactory
containsLocalBean
public boolean containsLocalBean(String name)
- Description copied from interface:
HierarchicalBeanFactory - Return whether the local bean factory contains a bean of the given name,
ignoring beans defined in ancestor contexts.
This is an alternative to
containsBean, ignoring a bean of the given name from an ancestor bean factory.- Specified by:
containsLocalBeanin interfaceHierarchicalBeanFactory
- Parameters:
name- the name of the bean to query- Returns:
- whether a bean with the given name is defined in the local factory
- See Also:
BeanFactory.containsBean(java.lang.String)
getInternalParentBeanFactory
protected BeanFactory getInternalParentBeanFactory()
- Return the internal bean factory of the parent context if it implements
ConfigurableApplicationContext; else, return the parent context itself.
getMessage
public String getMessage(String code, Object[] args, String defaultMessage, Locale locale)
- Description copied from interface:
MessageSource - Try to resolve the message. Return default message if no message was found.
- Specified by:
getMessagein interfaceMessageSource
- Parameters:
code- the code to lookup up, such as 'calculator.noRateSet'. Users of this class are encouraged to base message names on the relevant fully qualified class name, thus avoiding conflict and ensuring maximum clarity.args- array of arguments that will be filled in for params within the message (params look like "{0}", "{1,date}", "{2,time}" within a message), ornullif none.defaultMessage- String to return if the lookup failslocale- the Locale in which to do the lookup- Returns:
- the resolved message if the lookup was successful; otherwise the default message passed as a parameter
- See Also:
MessageFormat
getMessage
public String getMessage(String code, Object[] args, Locale locale) throws NoSuchMessageException
- Description copied from interface:
MessageSource - Try to resolve the message. Treat as an error if the message can't be found.
- Specified by:
getMessagein interfaceMessageSource
- Parameters:
code- the code to lookup up, such as 'calculator.noRateSet'args- Array of arguments that will be filled in for params within the message (params look like "{0}", "{1,date}", "{2,time}" within a message), ornullif none.locale- the Locale in which to do the lookup- Returns:
- the resolved message
- Throws:
NoSuchMessageException- if the message wasn't found- See Also:
MessageFormat
getMessage
public String getMessage(MessageSourceResolvable resolvable, Locale locale) throws NoSuchMessageException
- Description copied from interface:
MessageSource - Try to resolve the message using all the attributes contained within the
MessageSourceResolvableargument that was passed in.NOTE: We must throw a
NoSuchMessageExceptionon this method since at the time of calling this method we aren't able to determine if thedefaultMessageproperty of the resolvable is null or not.- Specified by:
getMessagein interfaceMessageSource
- Parameters:
resolvable- value object storing attributes required to properly resolve a messagelocale- the Locale in which to do the lookup- Returns:
- the resolved message
- Throws:
NoSuchMessageException- if the message wasn't found- See Also:
MessageFormat
getInternalParentMessageSource
protected MessageSource getInternalParentMessageSource()
- Return the internal message source of the parent context if it is an
AbstractApplicationContext too; else, return the parent context itself.
getResources
public Resource[] getResources(String locationPattern) throws IOException
- Description copied from interface:
ResourcePatternResolver - Resolve the given location pattern into Resource objects.
Overlapping resource entries that point to the same physical resource should be avoided, as far as possible. The result should have set semantics.
- Specified by:
getResourcesin interfaceResourcePatternResolver
- Parameters:
locationPattern- the location pattern to resolve- Returns:
- the corresponding Resource objects
- Throws:
IOException- in case of I/O errors
start
public void start()
- Description copied from interface:
Lifecycle - Start this component.
Should not throw an exception if the component is already running.
In the case of a container, this will propagate the start signal to all components that apply.
stop
public void stop()
- Description copied from interface:
Lifecycle - Stop this component.
Should not throw an exception if the component isn't started yet.
In the case of a container, this will propagate the stop signal to all components that apply.
isRunning
public boolean isRunning()
- Description copied from interface:
Lifecycle - Check whether this component is currently running.
In the case of a container, this will return
trueonly if all components that apply are currently running.- Returns:
- whether the component is currently running
refreshBeanFactory
protected abstract void refreshBeanFactory()
throws BeansException,
IllegalStateException
- Subclasses must implement this method to perform the actual configuration load.
The method is invoked by
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.
- Throws:
BeansException- if initialization of the bean factory failedIllegalStateException- if already initialized and multiple refresh attempts are not supported
closeBeanFactory
protected abstract void closeBeanFactory()
- Subclasses must implement this method to release their internal bean factory.
This method gets invoked by
close()after all other shutdown work.Should never throw an exception but rather log shutdown failures.
getBeanFactory
public abstract ConfigurableListableBeanFactory getBeanFactory() throws IllegalStateException
- 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:
getBeanFactoryin interfaceConfigurableApplicationContext
- Returns:
- this application context's internal bean factory (never
null) - Throws:
IllegalStateException- if the context does not hold an internal bean factory yet (usually ifrefresh()has never been called) or if the context has been closed already- See Also:
refreshBeanFactory(),closeBeanFactory()
toString
public String toString()
