Class QualifierAnnotationAutowireCandidateResolver
- All Implemented Interfaces:
Cloneable
,Aware
,BeanFactoryAware
,AutowireCandidateResolver
- Direct Known Subclasses:
ContextAnnotationAutowireCandidateResolver
AutowireCandidateResolver
implementation that matches bean definition qualifiers
against qualifier annotations
on the field or parameter to be autowired.
Also supports suggested expression values through a value
annotation.
Also supports JSR-330's Qualifier
annotation (as well as its
pre-Jakarta javax.inject.Qualifier
equivalent), if available.
- Since:
- 2.5
- Author:
- Mark Fisher, Juergen Hoeller, Stephane Nicoll, Sam Brannen
- See Also:
-
Field Summary
Fields inherited from class org.springframework.beans.factory.support.SimpleAutowireCandidateResolver
INSTANCE
-
Constructor Summary
ConstructorDescriptionCreate a newQualifierAnnotationAutowireCandidateResolver
for Spring's standardQualifier
annotation.QualifierAnnotationAutowireCandidateResolver
(Class<? extends Annotation> qualifierType) Create a newQualifierAnnotationAutowireCandidateResolver
for the given qualifier annotation type.QualifierAnnotationAutowireCandidateResolver
(Set<Class<? extends Annotation>> qualifierTypes) Create a newQualifierAnnotationAutowireCandidateResolver
for the given qualifier annotation types. -
Method Summary
Modifier and TypeMethodDescriptionvoid
addQualifierType
(Class<? extends Annotation> qualifierType) Register the given type to be used as a qualifier when autowiring.protected boolean
checkQualifier
(BeanDefinitionHolder bdHolder, Annotation annotation, TypeConverter typeConverter) Match the given qualifier annotation against the candidate bean definition.protected Boolean
checkQualifiers
(BeanDefinitionHolder bdHolder, Annotation[] annotationsToSearch) Match the given qualifier annotations against the candidate bean definition.protected Object
Extract the value attribute from the given annotation.protected Object
findValue
(Annotation[] annotationsToSearch) Determine a suggested value from any of the given candidate annotations.protected Annotation
getFactoryMethodAnnotation
(RootBeanDefinition bd, Class<? extends Annotation> type) protected Annotation
getQualifiedElementAnnotation
(RootBeanDefinition bd, Class<? extends Annotation> type) getSuggestedName
(DependencyDescriptor descriptor) Determine whether a target bean name is suggested for the given dependency (typically - but not necessarily - declared with a single-value qualifier).getSuggestedValue
(DependencyDescriptor descriptor) Determine whether the given dependency declares a value annotation.boolean
hasQualifier
(DependencyDescriptor descriptor) Determine whether the given dependency declares a qualifier annotation.boolean
isAutowireCandidate
(BeanDefinitionHolder bdHolder, DependencyDescriptor descriptor) Determine whether the provided bean definition is an autowire candidate.protected boolean
isQualifier
(Class<? extends Annotation> annotationType) Check whether the given annotation type is a recognized qualifier type.boolean
isRequired
(DependencyDescriptor descriptor) Determine whether the given dependency declares an autowired annotation, checking its required flag.void
setValueAnnotationType
(Class<? extends Annotation> valueAnnotationType) Set the 'value' annotation type, to be used on fields, method parameters and constructor parameters.Methods inherited from class org.springframework.beans.factory.support.GenericTypeAwareAutowireCandidateResolver
checkGenericTypeMatch, cloneIfNecessary, getBeanFactory, getResolvedDecoratedDefinition, getReturnTypeForFactoryMethod, setBeanFactory
Methods inherited from class org.springframework.beans.factory.support.SimpleAutowireCandidateResolver
getLazyResolutionProxyClass, getLazyResolutionProxyIfNecessary
-
Constructor Details
-
QualifierAnnotationAutowireCandidateResolver
public QualifierAnnotationAutowireCandidateResolver() -
QualifierAnnotationAutowireCandidateResolver
Create a newQualifierAnnotationAutowireCandidateResolver
for the given qualifier annotation type.- Parameters:
qualifierType
- the qualifier annotation to look for
-
QualifierAnnotationAutowireCandidateResolver
public QualifierAnnotationAutowireCandidateResolver(Set<Class<? extends Annotation>> qualifierTypes) Create a newQualifierAnnotationAutowireCandidateResolver
for the given qualifier annotation types.- Parameters:
qualifierTypes
- the qualifier annotations to look for
-
-
Method Details
-
addQualifierType
Register the given type to be used as a qualifier when autowiring.This identifies qualifier annotations for direct use (on fields, method parameters and constructor parameters) as well as meta annotations that in turn identify actual qualifier annotations.
This implementation only supports annotations as qualifier types. The default is Spring's
Qualifier
annotation which serves as a qualifier for direct use and also as a meta annotation.- Parameters:
qualifierType
- the annotation type to register
-
setValueAnnotationType
Set the 'value' annotation type, to be used on fields, method parameters and constructor parameters.The default value annotation type is the Spring-provided
Value
annotation.This setter property exists so that developers can provide their own (non-Spring-specific) annotation type to indicate a default value expression for a specific argument.
-
isAutowireCandidate
Determine whether the provided bean definition is an autowire candidate.To be considered a candidate the bean's autowire-candidate attribute must not have been set to 'false'. Also, if an annotation on the field or parameter to be autowired is recognized by this bean factory as a qualifier, the bean must 'match' against the annotation as well as any attributes it may contain. The bean definition must contain the same qualifier or match by meta attributes. A "value" attribute will fall back to match against the bean name or an alias if a qualifier or attribute does not match.
- Specified by:
isAutowireCandidate
in interfaceAutowireCandidateResolver
- Overrides:
isAutowireCandidate
in classGenericTypeAwareAutowireCandidateResolver
- Parameters:
bdHolder
- the bean definition including bean name and aliasesdescriptor
- the descriptor for the target method parameter or field- Returns:
- whether the bean definition qualifies as autowire candidate
- See Also:
-
checkQualifiers
@Nullable protected Boolean checkQualifiers(BeanDefinitionHolder bdHolder, Annotation[] annotationsToSearch) Match the given qualifier annotations against the candidate bean definition.- Returns:
false
if a qualifier has been found but not matched,true
if a qualifier has been found and matched,null
if no qualifier has been found at all
-
isQualifier
Check whether the given annotation type is a recognized qualifier type. -
checkQualifier
protected boolean checkQualifier(BeanDefinitionHolder bdHolder, Annotation annotation, TypeConverter typeConverter) Match the given qualifier annotation against the candidate bean definition. -
getQualifiedElementAnnotation
@Nullable protected Annotation getQualifiedElementAnnotation(RootBeanDefinition bd, Class<? extends Annotation> type) -
getFactoryMethodAnnotation
@Nullable protected Annotation getFactoryMethodAnnotation(RootBeanDefinition bd, Class<? extends Annotation> type) -
isRequired
Determine whether the given dependency declares an autowired annotation, checking its required flag.- Specified by:
isRequired
in interfaceAutowireCandidateResolver
- Overrides:
isRequired
in classSimpleAutowireCandidateResolver
- Parameters:
descriptor
- the descriptor for the target method parameter or field- Returns:
- whether the descriptor is marked as required or possibly indicating non-required status some other way (for example, through a parameter annotation)
- See Also:
-
hasQualifier
Determine whether the given dependency declares a qualifier annotation.- Specified by:
hasQualifier
in interfaceAutowireCandidateResolver
- Overrides:
hasQualifier
in classSimpleAutowireCandidateResolver
- Parameters:
descriptor
- the descriptor for the target method parameter or field- Returns:
- whether the descriptor declares a qualifier, narrowing the candidate status beyond the type match
- See Also:
-
getSuggestedName
Description copied from interface:AutowireCandidateResolver
Determine whether a target bean name is suggested for the given dependency (typically - but not necessarily - declared with a single-value qualifier).- Specified by:
getSuggestedName
in interfaceAutowireCandidateResolver
- Overrides:
getSuggestedName
in classSimpleAutowireCandidateResolver
- Parameters:
descriptor
- the descriptor for the target method parameter or field- Returns:
- the qualifier value, if any
-
getSuggestedValue
Determine whether the given dependency declares a value annotation.- Specified by:
getSuggestedValue
in interfaceAutowireCandidateResolver
- Overrides:
getSuggestedValue
in classSimpleAutowireCandidateResolver
- Parameters:
descriptor
- the descriptor for the target method parameter or field- Returns:
- the value suggested (typically an expression String),
or
null
if none found - See Also:
-
findValue
Determine a suggested value from any of the given candidate annotations. -
extractValue
Extract the value attribute from the given annotation.- Since:
- 4.3
-