org.springframework.context.annotation
Class AnnotationConfigApplicationContext

java.lang.Object
  extended by org.springframework.core.io.DefaultResourceLoader
      extended by org.springframework.context.support.AbstractApplicationContext
          extended by org.springframework.context.support.GenericApplicationContext
              extended by org.springframework.context.annotation.AnnotationConfigApplicationContext
All Implemented Interfaces:
BeanFactory, DisposableBean, HierarchicalBeanFactory, ListableBeanFactory, BeanDefinitionRegistry, ApplicationContext, ApplicationEventPublisher, ConfigurableApplicationContext, Lifecycle, MessageSource, AliasRegistry, EnvironmentCapable, ResourceLoader, ResourcePatternResolver

public class AnnotationConfigApplicationContext
extends GenericApplicationContext

Standalone application context, accepting annotated classes as input - in particular @Configuration-annotated classes, but also plain @Component types and JSR-330 compliant classes using javax.inject annotations. Allows for registering classes one by one using register(Class...) as well as for classpath scanning using scan(String...).

In case of multiple @Configuration classes, @Bean methods defined in later classes will override those defined in earlier classes. This can be leveraged to deliberately override certain bean definitions via an extra @Configuration class.

See @Configuration Javadoc for usage examples.

Since:
3.0
Author:
Chris Beams, Juergen Hoeller
See Also:
register(java.lang.Class...), scan(java.lang.String...), AnnotatedBeanDefinitionReader, ClassPathBeanDefinitionScanner, GenericXmlApplicationContext

Field Summary
private  AnnotatedBeanDefinitionReader reader
           
private  ClassPathBeanDefinitionScanner scanner
           
 
Fields inherited from class org.springframework.context.support.AbstractApplicationContext
APPLICATION_EVENT_MULTICASTER_BEAN_NAME, LIFECYCLE_PROCESSOR_BEAN_NAME, logger, MESSAGE_SOURCE_BEAN_NAME
 
Fields inherited from interface org.springframework.context.ConfigurableApplicationContext
CONFIG_LOCATION_DELIMITERS, CONVERSION_SERVICE_BEAN_NAME, ENVIRONMENT_BEAN_NAME, LOAD_TIME_WEAVER_BEAN_NAME, SYSTEM_ENVIRONMENT_BEAN_NAME, SYSTEM_PROPERTIES_BEAN_NAME
 
Fields inherited from interface org.springframework.beans.factory.BeanFactory
FACTORY_BEAN_PREFIX
 
Fields inherited from interface org.springframework.core.io.support.ResourcePatternResolver
CLASSPATH_ALL_URL_PREFIX
 
Fields inherited from interface org.springframework.core.io.ResourceLoader
CLASSPATH_URL_PREFIX
 
Constructor Summary
AnnotationConfigApplicationContext()
          Create a new AnnotationConfigApplicationContext that needs to be populated through register(java.lang.Class...) calls and then manually refreshed.
AnnotationConfigApplicationContext(java.lang.Class<?>... annotatedClasses)
          Create a new AnnotationConfigApplicationContext, deriving bean definitions from the given annotated classes and automatically refreshing the context.
AnnotationConfigApplicationContext(java.lang.String... basePackages)
          Create a new AnnotationConfigApplicationContext, scanning for bean definitions in the given packages and automatically refreshing the context.
 
Method Summary
 void register(java.lang.Class<?>... annotatedClasses)
          Register one or more annotated classes to be processed.
 void scan(java.lang.String... basePackages)
          Perform a scan within the specified base packages.
 void setBeanNameGenerator(BeanNameGenerator beanNameGenerator)
          Provide a custom BeanNameGenerator for use with AnnotatedBeanDefinitionReader and/or ClassPathBeanDefinitionScanner, if any.
 void setEnvironment(ConfigurableEnvironment environment)
          Set the Environment for this application context.
 void setScopeMetadataResolver(ScopeMetadataResolver scopeMetadataResolver)
          Set the ScopeMetadataResolver to use for detected bean classes.
 
Methods inherited from class org.springframework.context.support.GenericApplicationContext
cancelRefresh, closeBeanFactory, getBeanDefinition, getBeanFactory, getDefaultListableBeanFactory, getResource, getResources, isAlias, isBeanNameInUse, refreshBeanFactory, registerAlias, registerBeanDefinition, removeAlias, removeBeanDefinition, setAllowBeanDefinitionOverriding, setAllowCircularReferences, setId, setParent, setResourceLoader
 
Methods inherited from class org.springframework.context.support.AbstractApplicationContext
addApplicationListener, addBeanFactoryPostProcessor, addListener, close, containsBean, containsBeanDefinition, containsLocalBean, createEnvironment, destroy, destroyBeans, doClose, findAnnotationOnBean, finishBeanFactoryInitialization, finishRefresh, getAliases, getApplicationListeners, getAutowireCapableBeanFactory, getBean, getBean, getBean, getBean, getBeanDefinitionCount, getBeanDefinitionNames, getBeanFactoryPostProcessors, getBeanNamesForType, getBeanNamesForType, getBeansOfType, getBeansOfType, getBeansWithAnnotation, getDisplayName, getEnvironment, getId, getInternalParentBeanFactory, getInternalParentMessageSource, getMessage, getMessage, getMessage, getParent, getParentBeanFactory, getResourcePatternResolver, getStartupDate, getType, initApplicationEventMulticaster, initLifecycleProcessor, initMessageSource, initPropertySources, invokeBeanFactoryPostProcessors, isActive, isPrototype, isRunning, isSingleton, isTypeMatch, obtainFreshBeanFactory, onClose, onRefresh, postProcessBeanFactory, prepareBeanFactory, prepareRefresh, publishEvent, refresh, registerBeanPostProcessors, registerListeners, registerShutdownHook, setDisplayName, start, stop, toString
 
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
 

Field Detail

reader

private final AnnotatedBeanDefinitionReader reader

scanner

private final ClassPathBeanDefinitionScanner scanner
Constructor Detail

AnnotationConfigApplicationContext

public AnnotationConfigApplicationContext()
Create a new AnnotationConfigApplicationContext that needs to be populated through register(java.lang.Class...) calls and then manually refreshed.


AnnotationConfigApplicationContext

public AnnotationConfigApplicationContext(java.lang.Class<?>... annotatedClasses)
Create a new AnnotationConfigApplicationContext, deriving bean definitions from the given annotated classes and automatically refreshing the context.

Parameters:
annotatedClasses - one or more annotated classes, e.g. @Configuration classes

AnnotationConfigApplicationContext

public AnnotationConfigApplicationContext(java.lang.String... basePackages)
Create a new AnnotationConfigApplicationContext, scanning for bean definitions in the given packages and automatically refreshing the context.

Parameters:
basePackages - the packages to check for annotated classes
Method Detail

setEnvironment

public void setEnvironment(ConfigurableEnvironment environment)
Set the Environment for this application context.

Default value is determined by AbstractApplicationContext.createEnvironment(). Replacing the default with this method is one option but configuration through AbstractApplicationContext.getEnvironment() should also be considered. In either case, such modifications should be performed before AbstractApplicationContext.refresh().

Delegates given environment to underlying AnnotatedBeanDefinitionReader and ClassPathBeanDefinitionScanner members.

Specified by:
setEnvironment in interface ConfigurableApplicationContext
Overrides:
setEnvironment in class AbstractApplicationContext
Parameters:
environment - the new environment
See Also:
AbstractApplicationContext.createEnvironment()

setBeanNameGenerator

public void setBeanNameGenerator(BeanNameGenerator beanNameGenerator)
Provide a custom BeanNameGenerator for use with AnnotatedBeanDefinitionReader and/or ClassPathBeanDefinitionScanner, if any.

Default is AnnotationBeanNameGenerator.

Any call to this method must occur prior to calls to register(Class...) and/or scan(String...).

See Also:
AnnotatedBeanDefinitionReader.setBeanNameGenerator(org.springframework.beans.factory.support.BeanNameGenerator), ClassPathBeanDefinitionScanner.setBeanNameGenerator(org.springframework.beans.factory.support.BeanNameGenerator)

setScopeMetadataResolver

public void setScopeMetadataResolver(ScopeMetadataResolver scopeMetadataResolver)
Set the ScopeMetadataResolver to use for detected bean classes.

The default is an AnnotationScopeMetadataResolver.

Any call to this method must occur prior to calls to register(Class...) and/or scan(String...).


register

public void register(java.lang.Class<?>... annotatedClasses)
Register one or more annotated classes to be processed. Note that AbstractApplicationContext.refresh() must be called in order for the context to fully process the new class.

Calls to register(java.lang.Class...) are idempotent; adding the same annotated class more than once has no additional effect.

Parameters:
annotatedClasses - one or more annotated classes, e.g. @Configuration classes
See Also:
scan(String...), AbstractApplicationContext.refresh()

scan

public void scan(java.lang.String... basePackages)
Perform a scan within the specified base packages. Note that AbstractApplicationContext.refresh() must be called in order for the context to fully process the new class.

Parameters:
basePackages - the packages to check for annotated classes
See Also:
register(Class...), AbstractApplicationContext.refresh()