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:
  Closeable, AutoCloseable, 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

Constructors
Constructor and Description
`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

Methods
`protected void` `prepareRefresh()` Prepare this context for refreshing, setting its startup date and active flag as well as performing any initialization of property sources.
`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, getApplicationName, 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, 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()`

#### prepareRefresh

    protected void prepareRefresh()

Description copied from class: `AbstractApplicationContext`
Prepare this context for refreshing, setting its startup date and active flag as well as performing any initialization of property sources.

Overrides:
  `prepareRefresh` in class `AbstractApplicationContext`