## org.springframework.context.annotation
Class AnnotationConfigApplicationContext

    java.lang.Object
      org.springframework.core.io.DefaultResourceLoader
          org.springframework.context.support.AbstractApplicationContext
              org.springframework.context.support.GenericApplicationContext
                  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

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(Class<?>... annotatedClasses)` Create a new AnnotationConfigApplicationContext, deriving bean definitions from the given annotated classes and automatically refreshing the context.
`AnnotationConfigApplicationContext(String... basePackages)` Create a new AnnotationConfigApplicationContext, scanning for bean definitions in the given packages and automatically refreshing the context.

Method Summary
`void` `register(Class<?>... annotatedClasses)` Register one or more annotated classes to be processed.
`void` `scan(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`

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(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(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(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(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()`