public class AnnotationConfigApplicationContext extends GenericApplicationContext implements AnnotationConfigRegistry
@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
's javadoc for usage examples.
register(java.lang.Class<?>...)
,
scan(java.lang.String...)
,
AnnotatedBeanDefinitionReader
,
ClassPathBeanDefinitionScanner
,
GenericXmlApplicationContext
DefaultResourceLoader.ClassPathContextResource
APPLICATION_EVENT_MULTICASTER_BEAN_NAME, LIFECYCLE_PROCESSOR_BEAN_NAME, logger, MESSAGE_SOURCE_BEAN_NAME
CONFIG_LOCATION_DELIMITERS, CONVERSION_SERVICE_BEAN_NAME, ENVIRONMENT_BEAN_NAME, LOAD_TIME_WEAVER_BEAN_NAME, SYSTEM_ENVIRONMENT_BEAN_NAME, SYSTEM_PROPERTIES_BEAN_NAME
FACTORY_BEAN_PREFIX
CLASSPATH_ALL_URL_PREFIX
CLASSPATH_URL_PREFIX
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<?>... componentClasses)
Create a new AnnotationConfigApplicationContext, deriving bean definitions
from the given component classes and automatically refreshing the context.
|
AnnotationConfigApplicationContext(DefaultListableBeanFactory beanFactory)
Create a new AnnotationConfigApplicationContext with the given DefaultListableBeanFactory.
|
AnnotationConfigApplicationContext(String... basePackages)
Create a new AnnotationConfigApplicationContext, scanning for components
in the given packages, registering bean definitions for those components,
and automatically refreshing the context.
|
Modifier and Type | Method and Description |
---|---|
void |
register(Class<?>... componentClasses)
Register one or more component classes to be processed.
|
<T> void |
registerBean(Class<T> beanClass,
Object... constructorArguments)
Register a bean from the given bean class, deriving its metadata from
class-declared annotations, and optionally providing explicit constructor
arguments for consideration in the autowiring process.
|
<T> void |
registerBean(String beanName,
Class<T> beanClass,
Object... constructorArguments)
Register a bean from the given bean class, deriving its metadata from
class-declared annotations, and optionally providing explicit constructor
arguments for consideration in the autowiring process.
|
<T> void |
registerBean(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).
|
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)
Propagate the given custom
Environment to the underlying
AnnotatedBeanDefinitionReader and ClassPathBeanDefinitionScanner . |
void |
setScopeMetadataResolver(ScopeMetadataResolver scopeMetadataResolver)
Set the
ScopeMetadataResolver to use for registered component classes. |
cancelRefresh, closeBeanFactory, getAutowireCapableBeanFactory, getBeanDefinition, getBeanFactory, getClassLoader, getDefaultListableBeanFactory, getResource, getResources, isAlias, isBeanNameInUse, refreshBeanFactory, registerAlias, registerBean, registerBean, registerBean, registerBeanDefinition, removeAlias, removeBeanDefinition, setAllowBeanDefinitionOverriding, setAllowCircularReferences, setClassLoader, setParent, setResourceLoader
addApplicationListener, addBeanFactoryPostProcessor, assertBeanFactoryActive, close, containsBean, containsBeanDefinition, containsLocalBean, createEnvironment, destroy, destroyBeans, doClose, findAnnotationOnBean, finishBeanFactoryInitialization, finishRefresh, getAliases, getApplicationListeners, getApplicationName, getBean, getBean, getBean, getBean, getBean, getBeanDefinitionCount, getBeanDefinitionNames, getBeanFactoryPostProcessors, getBeanNamesForAnnotation, getBeanNamesForType, getBeanNamesForType, getBeanNamesForType, getBeanProvider, getBeanProvider, 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, isTypeMatch, obtainFreshBeanFactory, onClose, onRefresh, postProcessBeanFactory, prepareBeanFactory, prepareRefresh, publishEvent, publishEvent, publishEvent, refresh, registerBeanPostProcessors, registerListeners, registerShutdownHook, resetCommonCaches, setDisplayName, setId, start, stop, toString
addProtocolResolver, clearResourceCaches, getProtocolResolvers, getResourceByPath, getResourceCache
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
containsBeanDefinition, getBeanDefinitionCount, getBeanDefinitionNames
getAliases
addProtocolResolver
public AnnotationConfigApplicationContext()
register(java.lang.Class<?>...)
calls and then manually refreshed.public AnnotationConfigApplicationContext(DefaultListableBeanFactory beanFactory)
beanFactory
- the DefaultListableBeanFactory instance to use for this contextpublic AnnotationConfigApplicationContext(Class<?>... componentClasses)
componentClasses
- one or more component classes — for example,
@Configuration
classespublic AnnotationConfigApplicationContext(String... basePackages)
basePackages
- the packages to scan for component classespublic void setEnvironment(ConfigurableEnvironment environment)
Environment
to the underlying
AnnotatedBeanDefinitionReader
and ClassPathBeanDefinitionScanner
.setEnvironment
in interface ConfigurableApplicationContext
setEnvironment
in class AbstractApplicationContext
environment
- the new environmentAbstractApplicationContext.createEnvironment()
public void setBeanNameGenerator(BeanNameGenerator beanNameGenerator)
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...)
.
public void setScopeMetadataResolver(ScopeMetadataResolver scopeMetadataResolver)
ScopeMetadataResolver
to use for registered component classes.
The default is an AnnotationScopeMetadataResolver
.
Any call to this method must occur prior to calls to register(Class...)
and/or scan(String...)
.
public void register(Class<?>... componentClasses)
Note that AbstractApplicationContext.refresh()
must be called in order for the context
to fully process the new classes.
register
in interface AnnotationConfigRegistry
componentClasses
- one or more component classes — for example,
@Configuration
classesscan(String...)
,
AbstractApplicationContext.refresh()
public void scan(String... basePackages)
Note that AbstractApplicationContext.refresh()
must be called in order for the context
to fully process the new classes.
scan
in interface AnnotationConfigRegistry
basePackages
- the packages to scan for component classesregister(Class...)
,
AbstractApplicationContext.refresh()
public <T> void registerBean(Class<T> beanClass, Object... constructorArguments)
The bean name will be generated according to annotated component rules.
beanClass
- the class of the beanconstructorArguments
- 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 null
or empty)public <T> void registerBean(@Nullable String beanName, Class<T> beanClass, Object... constructorArguments)
beanName
- the name of the bean (may be null
)beanClass
- the class of the beanconstructorArguments
- 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 null
or empty)public <T> void registerBean(@Nullable String beanName, Class<T> beanClass, @Nullable Supplier<T> supplier, BeanDefinitionCustomizer... customizers)
GenericApplicationContext
This method can be overridden to adapt the registration mechanism for
all registerBean
methods (since they all delegate to this one).
registerBean
in class GenericApplicationContext
beanName
- the name of the bean (may be null
)beanClass
- the class of the beansupplier
- 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