Class GenericApplicationContext
- All Implemented Interfaces:
- Closeable,- AutoCloseable,- BeanFactory,- HierarchicalBeanFactory,- ListableBeanFactory,- BeanDefinitionRegistry,- ApplicationContext,- ApplicationEventPublisher,- ConfigurableApplicationContext,- Lifecycle,- MessageSource,- AliasRegistry,- EnvironmentCapable,- ResourceLoader,- ResourcePatternResolver
- Direct Known Subclasses:
- AnnotationConfigApplicationContext,- GenericGroovyApplicationContext,- GenericWebApplicationContext,- GenericXmlApplicationContext,- StaticApplicationContext
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.
 
This ApplicationContext implementation is suitable for Ahead of Time
 processing, using #refreshForAotProcessing() as an alternative to the
 regular AbstractApplicationContext.refresh().
 
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, Chris Beams, Stephane Nicoll, Sam Brannen
- See Also:
- 
Nested Class SummaryNested classes/interfaces inherited from class org.springframework.core.io.DefaultResourceLoaderDefaultResourceLoader.ClassPathContextResource
- 
Field SummaryFields inherited from class org.springframework.context.support.AbstractApplicationContextAPPLICATION_EVENT_MULTICASTER_BEAN_NAME, LIFECYCLE_PROCESSOR_BEAN_NAME, logger, MESSAGE_SOURCE_BEAN_NAMEFields inherited from interface org.springframework.beans.factory.BeanFactoryFACTORY_BEAN_PREFIXFields inherited from interface org.springframework.context.ConfigurableApplicationContextAPPLICATION_STARTUP_BEAN_NAME, CONFIG_LOCATION_DELIMITERS, CONVERSION_SERVICE_BEAN_NAME, ENVIRONMENT_BEAN_NAME, LOAD_TIME_WEAVER_BEAN_NAME, SHUTDOWN_HOOK_THREAD_NAME, SYSTEM_ENVIRONMENT_BEAN_NAME, SYSTEM_PROPERTIES_BEAN_NAMEFields inherited from interface org.springframework.core.io.ResourceLoaderCLASSPATH_URL_PREFIXFields inherited from interface org.springframework.core.io.support.ResourcePatternResolverCLASSPATH_ALL_URL_PREFIX
- 
Constructor SummaryConstructorsConstructorDescriptionCreate a new GenericApplicationContext.GenericApplicationContext(DefaultListableBeanFactory beanFactory) Create a new GenericApplicationContext with the given DefaultListableBeanFactory.GenericApplicationContext(DefaultListableBeanFactory beanFactory, ApplicationContext parent) Create a new GenericApplicationContext with the given DefaultListableBeanFactory.Create a new GenericApplicationContext with the given parent.
- 
Method SummaryModifier and TypeMethodDescriptionprotected voidCancel this context's refresh attempt, resetting theactiveflag after an exception got thrown.protected final voidNot much to do: We hold a single internal BeanFactory that will never get released.Return this context's internal bean factory as AutowireCapableBeanFactory, if already available.getBeanDefinition(String beanName) Return the BeanDefinition for the given bean name.Return the single internal BeanFactory held by this context (as ConfigurableListableBeanFactory).Return the ClassLoader to load class path resources with.Return the underlying bean factory of this context, available for registering bean definitions.getResource(String location) This implementation delegates to this context'sResourceLoaderif set, falling back to the default superclass behavior otherwise.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 otherwise.booleanDetermine whether the given name is defined as an alias (as opposed to the name of an actually registered component).booleanisBeanNameInUse(String beanName) Determine whether the given bean name is already in use within this registry, i.e.protected final voidDo nothing: We hold a single internal BeanFactory and rely on callers to register beans through our public methods (or the BeanFactory's).voidrefreshForAotProcessing(RuntimeHints runtimeHints) Load or refresh the persistent representation of the configuration up to a point where the underlying bean factory is ready to create bean instances.voidregisterAlias(String beanName, String alias) Given a name, register an alias for it.<T> voidregisterBean(Class<T> beanClass, Object... constructorArgs) Register a bean from the given bean class, optionally providing explicit constructor arguments for consideration in the autowiring process.final <T> voidregisterBean(Class<T> beanClass, Supplier<T> supplier, BeanDefinitionCustomizer... customizers) Register a bean from the given bean class, using the given supplier for obtaining a new instance (typically declared as a lambda expression or method reference), optionally customizing its bean definition metadata (again typically declared as a lambda expression).final <T> voidregisterBean(Class<T> beanClass, BeanDefinitionCustomizer... customizers) Register a bean from the given bean class, optionally customizing its bean definition metadata (typically declared as a lambda expression).<T> voidregisterBean(String beanName, Class<T> beanClass, Object... constructorArgs) Register a bean from the given bean class, optionally providing explicit constructor arguments for consideration in the autowiring process.<T> voidregisterBean(String beanName, Class<T> beanClass, Supplier<T> supplier, BeanDefinitionCustomizer... customizers) Register a bean from the given bean class, using the given supplier for obtaining a new instance (typically declared as a lambda expression or method reference), optionally customizing its bean definition metadata (again typically declared as a lambda expression).final <T> voidregisterBean(String beanName, Class<T> beanClass, BeanDefinitionCustomizer... customizers) Register a bean from the given bean class, optionally customizing its bean definition metadata (typically declared as a lambda expression).voidregisterBeanDefinition(String beanName, BeanDefinition beanDefinition) Register a new bean definition with this registry.voidremoveAlias(String alias) Remove the specified alias from this registry.voidremoveBeanDefinition(String beanName) Remove the BeanDefinition for the given name.voidsetAllowBeanDefinitionOverriding(boolean allowBeanDefinitionOverriding) Set whether it should be allowed to override bean definitions by registering a different definition with the same name, automatically replacing the former.voidsetAllowCircularReferences(boolean allowCircularReferences) Set whether to allow circular references between beans - and automatically try to resolve them.voidsetApplicationStartup(ApplicationStartup applicationStartup) Set theApplicationStartupfor this application context.voidsetClassLoader(ClassLoader classLoader) Specify the ClassLoader to load class path resources with, ornullfor using the thread context class loader at the time of actual resource access.voidsetParent(ApplicationContext parent) Set the parent of this application context, also setting the parent of the internal BeanFactory accordingly.voidsetResourceLoader(ResourceLoader resourceLoader) Set a ResourceLoader to use for this context.Methods inherited from class org.springframework.context.support.AbstractApplicationContextaddApplicationListener, addBeanFactoryPostProcessor, assertBeanFactoryActive, close, containsBean, containsBeanDefinition, containsLocalBean, createEnvironment, destroyBeans, doClose, findAnnotationOnBean, findAnnotationOnBean, finishBeanFactoryInitialization, finishRefresh, getAliases, getApplicationListeners, getApplicationName, getApplicationStartup, getBean, getBean, getBean, getBean, getBean, getBeanDefinitionCount, getBeanDefinitionNames, getBeanFactoryPostProcessors, getBeanNamesForAnnotation, getBeanNamesForType, getBeanNamesForType, getBeanNamesForType, getBeanNamesForType, getBeanProvider, getBeanProvider, getBeanProvider, getBeanProvider, getBeansOfType, getBeansOfType, getBeansWithAnnotation, getDisplayName, getEnvironment, getId, getInternalParentBeanFactory, getInternalParentMessageSource, getMessage, getMessage, getMessage, getParent, getParentBeanFactory, getResourcePatternResolver, getStartupDate, getType, getType, initApplicationEventMulticaster, initLifecycleProcessor, initMessageSource, initPropertySources, invokeBeanFactoryPostProcessors, isActive, isPrototype, isRunning, isSingleton, isTypeMatch, isTypeMatch, obtainFreshBeanFactory, onClose, onRefresh, postProcessBeanFactory, prepareBeanFactory, prepareRefresh, publishEvent, publishEvent, publishEvent, refresh, registerBeanPostProcessors, registerListeners, registerShutdownHook, removeApplicationListener, resetCommonCaches, setDisplayName, setEnvironment, setId, start, stop, toStringMethods inherited from class org.springframework.core.io.DefaultResourceLoaderaddProtocolResolver, clearResourceCaches, getProtocolResolvers, getResourceByPath, getResourceCacheMethods inherited from class java.lang.Objectclone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, waitMethods inherited from interface org.springframework.core.AliasRegistrygetAliasesMethods inherited from interface org.springframework.beans.factory.support.BeanDefinitionRegistrycontainsBeanDefinition, getBeanDefinitionCount, getBeanDefinitionNamesMethods inherited from interface org.springframework.context.ConfigurableApplicationContextaddProtocolResolver
- 
Constructor Details- 
GenericApplicationContextpublic GenericApplicationContext()Create a new GenericApplicationContext.
- 
GenericApplicationContextCreate a new GenericApplicationContext with the given DefaultListableBeanFactory.- Parameters:
- beanFactory- the DefaultListableBeanFactory instance to use for this context
- See Also:
 
- 
GenericApplicationContextCreate a new GenericApplicationContext with the given parent.- Parameters:
- parent- the parent application context
- See Also:
 
- 
GenericApplicationContextCreate a new GenericApplicationContext with the given DefaultListableBeanFactory.- Parameters:
- beanFactory- the DefaultListableBeanFactory instance to use for this context
- parent- the parent application context
- See Also:
 
 
- 
- 
Method Details- 
setParentSet the parent of this application context, also setting the parent of the internal BeanFactory accordingly.- Specified by:
- setParentin interface- ConfigurableApplicationContext
- Overrides:
- setParentin class- AbstractApplicationContext
- Parameters:
- parent- the parent context
- See Also:
 
- 
setApplicationStartupDescription copied from interface:ConfigurableApplicationContextSet theApplicationStartupfor this application context.This allows the application context to record metrics during startup. - Specified by:
- setApplicationStartupin interface- ConfigurableApplicationContext
- Overrides:
- setApplicationStartupin class- AbstractApplicationContext
- Parameters:
- applicationStartup- the new context event factory
 
- 
setAllowBeanDefinitionOverridingpublic void setAllowBeanDefinitionOverriding(boolean allowBeanDefinitionOverriding) Set whether it should be allowed to override bean definitions by registering a different definition with the same name, automatically replacing the former. If not, an exception will be thrown. Default is "true".- Since:
- 3.0
- See Also:
 
- 
setAllowCircularReferencespublic void setAllowCircularReferences(boolean allowCircularReferences) Set whether to allow circular references between beans - and automatically try to resolve them.Default is "true". Turn this off to throw an exception when encountering a circular reference, disallowing them completely. - Since:
- 3.0
- See Also:
 
- 
setResourceLoaderSet a ResourceLoader to use for this context. If set, the context will delegate allgetResourcecalls 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 (without 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.
- 
getResourceThis implementation delegates to this context'sResourceLoaderif set, falling back to the default superclass behavior otherwise.As of Spring Framework 5.3.22, this method also honors registered protocol resolvers when a custom ResourceLoaderhas been set.- Specified by:
- getResourcein interface- ResourceLoader
- Overrides:
- getResourcein class- DefaultResourceLoader
- Parameters:
- location- the resource location
- Returns:
- a corresponding Resourcehandle (nevernull)
- See Also:
 
- 
getResourcesThis implementation delegates to this context's ResourceLoader if it implements the ResourcePatternResolver interface, falling back to the default superclass behavior otherwise.- Specified by:
- getResourcesin interface- ResourcePatternResolver
- Overrides:
- getResourcesin class- AbstractApplicationContext
- Parameters:
- locationPattern- the location pattern to resolve
- Returns:
- the corresponding Resourceobjects
- Throws:
- IOException- in case of I/O errors
- See Also:
 
- 
setClassLoaderDescription copied from class:DefaultResourceLoaderSpecify the ClassLoader to load class path resources with, ornullfor using the thread context class loader at the time of actual resource access.The default is that ClassLoader access will happen using the thread context class loader at the time of actual resource access (since 5.3). - Specified by:
- setClassLoaderin interface- ConfigurableApplicationContext
- Overrides:
- setClassLoaderin class- DefaultResourceLoader
- See Also:
 
- 
getClassLoaderDescription copied from class:DefaultResourceLoaderReturn the ClassLoader to load class path resources with.Will get passed to ClassPathResource's constructor for all ClassPathResource objects created by this resource loader. - Specified by:
- getClassLoaderin interface- ResourceLoader
- Overrides:
- getClassLoaderin class- DefaultResourceLoader
- Returns:
- the ClassLoader(onlynullif even the systemClassLoaderisn't accessible)
- See Also:
 
- 
refreshBeanFactoryDo 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 class- AbstractApplicationContext
- Throws:
- IllegalStateException- if already initialized and multiple refresh attempts are not supported
- See Also:
 
- 
cancelRefreshDescription copied from class:AbstractApplicationContextCancel this context's refresh attempt, resetting theactiveflag after an exception got thrown.- Overrides:
- cancelRefreshin class- AbstractApplicationContext
- Parameters:
- ex- the exception that led to the cancellation
 
- 
closeBeanFactoryprotected final void closeBeanFactory()Not much to do: We hold a single internal BeanFactory that will never get released.- Specified by:
- closeBeanFactoryin class- AbstractApplicationContext
 
- 
getBeanFactoryReturn the single internal BeanFactory held by this context (as ConfigurableListableBeanFactory).- Specified by:
- getBeanFactoryin interface- ConfigurableApplicationContext
- Specified by:
- getBeanFactoryin class- AbstractApplicationContext
- Returns:
- this application context's internal bean factory (never null)
- See Also:
 
- 
getDefaultListableBeanFactoryReturn 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)
 
- 
getAutowireCapableBeanFactoryDescription copied from class:AbstractApplicationContextReturn this context's internal bean factory as AutowireCapableBeanFactory, if already available.- Specified by:
- getAutowireCapableBeanFactoryin interface- ApplicationContext
- Overrides:
- getAutowireCapableBeanFactoryin class- AbstractApplicationContext
- Returns:
- the AutowireCapableBeanFactory for this context
- Throws:
- IllegalStateException- if the context does not support the- AutowireCapableBeanFactoryinterface, or does not hold an autowire-capable bean factory yet (e.g. if- refresh()has never been called), or if the context has been closed already
- See Also:
 
- 
registerBeanDefinitionpublic void registerBeanDefinition(String beanName, BeanDefinition beanDefinition) throws BeanDefinitionStoreException Description copied from interface:BeanDefinitionRegistryRegister a new bean definition with this registry. Must support RootBeanDefinition and ChildBeanDefinition.- Specified by:
- registerBeanDefinitionin interface- BeanDefinitionRegistry
- Parameters:
- beanName- the name of the bean instance to register
- beanDefinition- definition of the bean instance to register
- Throws:
- BeanDefinitionStoreException- if the BeanDefinition is invalid
- BeanDefinitionOverrideException- if there is already a BeanDefinition for the specified bean name and we are not allowed to override it
- See Also:
 
- 
removeBeanDefinitionDescription copied from interface:BeanDefinitionRegistryRemove the BeanDefinition for the given name.- Specified by:
- removeBeanDefinitionin interface- BeanDefinitionRegistry
- Parameters:
- beanName- the name of the bean instance to register
- Throws:
- NoSuchBeanDefinitionException- if there is no such bean definition
 
- 
getBeanDefinitionDescription copied from interface:BeanDefinitionRegistryReturn the BeanDefinition for the given bean name.- Specified by:
- getBeanDefinitionin interface- BeanDefinitionRegistry
- 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
 
- 
isBeanNameInUseDescription copied from interface:BeanDefinitionRegistryDetermine 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 interface- BeanDefinitionRegistry
- Parameters:
- beanName- the name to check
- Returns:
- whether the given bean name is already in use
 
- 
registerAliasDescription copied from interface:AliasRegistryGiven a name, register an alias for it.- Specified by:
- registerAliasin interface- AliasRegistry
- Parameters:
- beanName- the canonical name
- alias- the alias to be registered
 
- 
removeAliasDescription copied from interface:AliasRegistryRemove the specified alias from this registry.- Specified by:
- removeAliasin interface- AliasRegistry
- Parameters:
- alias- the alias to remove
 
- 
isAliasDescription copied from interface:AliasRegistryDetermine whether the given name is defined as an alias (as opposed to the name of an actually registered component).- Specified by:
- isAliasin interface- AliasRegistry
- Parameters:
- beanName- the name to check
- Returns:
- whether the given name is an alias
 
- 
refreshForAotProcessingLoad or refresh the persistent representation of the configuration up to a point where the underlying bean factory is ready to create bean instances.This variant of AbstractApplicationContext.refresh()is used by Ahead of Time (AOT) processing that optimizes the application context, typically at build time.In this mode, only BeanDefinitionRegistryPostProcessorandMergedBeanDefinitionPostProcessorare invoked.- Parameters:
- runtimeHints- the runtime hints
- Throws:
- BeansException- if the bean factory could not be initialized
- IllegalStateException- if already initialized and multiple refresh attempts are not supported
- Since:
- 6.0
 
- 
registerBeanRegister a bean from the given bean class, optionally providing explicit constructor arguments for consideration in the autowiring process.- Parameters:
- beanClass- the class of the bean
- constructorArgs- custom argument values to be fed into Spring's constructor resolution algorithm, resolving either all arguments or just specific ones, with the rest to be resolved through regular autowiring (may be- nullor empty)
- Since:
- 5.2 (since 5.0 on the AnnotationConfigApplicationContext subclass)
 
- 
registerBeanpublic <T> void registerBean(@Nullable String beanName, Class<T> beanClass, Object... constructorArgs) Register a bean from the given bean class, optionally providing explicit constructor arguments for consideration in the autowiring process.- Parameters:
- beanName- the name of the bean (may be- null)
- beanClass- the class of the bean
- constructorArgs- custom argument values to be fed into Spring's constructor resolution algorithm, resolving either all arguments or just specific ones, with the rest to be resolved through regular autowiring (may be- nullor empty)
- Since:
- 5.2 (since 5.0 on the AnnotationConfigApplicationContext subclass)
 
- 
registerBeanRegister a bean from the given bean class, optionally customizing its bean definition metadata (typically declared as a lambda expression).- Parameters:
- beanClass- the class of the bean (resolving a public constructor to be autowired, possibly simply the default constructor)
- customizers- one or more callbacks for customizing the factory's- BeanDefinition, e.g. setting a lazy-init or primary flag
- Since:
- 5.0
- See Also:
 
- 
registerBeanpublic final <T> void registerBean(@Nullable String beanName, Class<T> beanClass, BeanDefinitionCustomizer... customizers) Register a bean from the given bean class, optionally customizing its bean definition metadata (typically declared as a lambda expression).- Parameters:
- beanName- the name of the bean (may be- null)
- beanClass- the class of the bean (resolving a public constructor to be autowired, possibly simply the default constructor)
- customizers- one or more callbacks for customizing the factory's- BeanDefinition, e.g. setting a lazy-init or primary flag
- Since:
- 5.0
- See Also:
 
- 
registerBeanpublic final <T> void registerBean(Class<T> beanClass, Supplier<T> supplier, BeanDefinitionCustomizer... customizers) Register a bean from the given bean class, using the given supplier for obtaining a new instance (typically declared as a lambda expression or method reference), optionally customizing its bean definition metadata (again typically declared as a lambda expression).- Parameters:
- beanClass- the class of the bean
- supplier- a callback for creating an instance of the bean
- customizers- one or more callbacks for customizing the factory's- BeanDefinition, e.g. setting a lazy-init or primary flag
- Since:
- 5.0
- See Also:
 
- 
registerBeanpublic <T> void registerBean(@Nullable String beanName, Class<T> beanClass, @Nullable Supplier<T> supplier, BeanDefinitionCustomizer... customizers) Register a bean from the given bean class, using the given supplier for obtaining a new instance (typically declared as a lambda expression or method reference), optionally customizing its bean definition metadata (again typically declared as a lambda expression).This method can be overridden to adapt the registration mechanism for all registerBeanmethods (since they all delegate to this one).- Parameters:
- beanName- the name of the bean (may be- null)
- beanClass- the class of the bean
- supplier- a callback for creating an instance of the bean (in case of- null, resolving a public constructor to be autowired instead)
- customizers- one or more callbacks for customizing the factory's- BeanDefinition, e.g. setting a lazy-init or primary flag
- Since:
- 5.0
 
 
-