Package org.springframework.beans.factory.annotation

# Class QualifierAnnotationAutowireCandidateResolver

java.lang.Object
org.springframework.beans.factory.support.SimpleAutowireCandidateResolver
org.springframework.beans.factory.support.GenericTypeAwareAutowireCandidateResolver
org.springframework.beans.factory.annotation.QualifierAnnotationAutowireCandidateResolver

All Implemented Interfaces:
  `Cloneable`, `Aware`, `BeanFactoryAware`, `AutowireCandidateResolver`

public class QualifierAnnotationAutowireCandidateResolver extends GenericTypeAwareAutowireCandidateResolver
`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:
  - `AutowireCandidateQualifier`
  - `Qualifier`
  - `Value`

## Field Summary

### Fields inherited from class org.springframework.beans.factory.support.SimpleAutowireCandidateResolver

`INSTANCE`

## Constructor Summary

Constructors
Constructor
Description
`QualifierAnnotationAutowireCandidateResolver()`
Create a new `QualifierAnnotationAutowireCandidateResolver` for Spring's standard `Qualifier` annotation.
`QualifierAnnotationAutowireCandidateResolver(Class<? extends Annotation> qualifierType)`
Create a new `QualifierAnnotationAutowireCandidateResolver` for the given qualifier annotation type.
`QualifierAnnotationAutowireCandidateResolver(Set<Class<? extends Annotation>> qualifierTypes)`
Create a new `QualifierAnnotationAutowireCandidateResolver` for the given qualifier annotation types.

## Method Summary

Modifier and Type
Method
Description
`void`
`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`
`extractValue(org.springframework.core.annotation.AnnotationAttributes attr)`
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)`
`String`
`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).
`Object`
`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

`resolveAutowireCandidates, resolveAutowireCandidates`

### Methods inherited from class java.lang.Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

### Methods inherited from interface org.springframework.beans.factory.support.AutowireCandidateResolver

`getLazyResolutionProxyClass, getLazyResolutionProxyIfNecessary`

## Constructor Details

### QualifierAnnotationAutowireCandidateResolver

public QualifierAnnotationAutowireCandidateResolver()
Create a new `QualifierAnnotationAutowireCandidateResolver` for Spring's standard `Qualifier` annotation.

Also supports JSR-330's `Qualifier` annotation (as well as its pre-Jakarta `javax.inject.Qualifier` equivalent), if available.

### QualifierAnnotationAutowireCandidateResolver

public QualifierAnnotationAutowireCandidateResolver(Class<? extends Annotation> qualifierType)
Create a new `QualifierAnnotationAutowireCandidateResolver` for the given qualifier annotation type.

Parameters:
  `qualifierType` - the qualifier annotation to look for

### QualifierAnnotationAutowireCandidateResolver

public QualifierAnnotationAutowireCandidateResolver(Set<Class<? extends Annotation>> qualifierTypes)
Create a new `QualifierAnnotationAutowireCandidateResolver` for the given qualifier annotation types.

Parameters:
  `qualifierTypes` - the qualifier annotations to look for

## Method Details

### addQualifierType

public void addQualifierType(Class<? extends Annotation> qualifierType)
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

public void setValueAnnotationType(Class<? extends Annotation> valueAnnotationType)
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

public boolean isAutowireCandidate(BeanDefinitionHolder bdHolder, DependencyDescriptor descriptor)
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 interface `AutowireCandidateResolver`
Overrides:
  `isAutowireCandidate` in class `GenericTypeAwareAutowireCandidateResolver`
Parameters:
  `bdHolder` - the bean definition including bean name and aliases
  `descriptor` - the descriptor for the target method parameter or field
Returns:
  whether the bean definition qualifies as autowire candidate
See Also:
  - `Qualifier`

### 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

protected boolean isQualifier(Class<? extends Annotation> annotationType)
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

public boolean isRequired(DependencyDescriptor descriptor)
Determine whether the given dependency declares an autowired annotation, checking its required flag.

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:
  - `Autowired.required()`

### hasQualifier

public boolean hasQualifier(DependencyDescriptor descriptor)
Determine whether the given dependency declares a qualifier annotation.

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:
  - `isQualifier(Class)`
  - `Qualifier`

### getSuggestedName

@Nullable public String getSuggestedName(DependencyDescriptor descriptor)
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).

Parameters:
  `descriptor` - the descriptor for the target method parameter or field
Returns:
  the qualifier value, if any

### getSuggestedValue

@Nullable public Object getSuggestedValue(DependencyDescriptor descriptor)
Determine whether the given dependency declares a value annotation.

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:
  - `Value`

### findValue

@Nullable protected Object findValue(Annotation[] annotationsToSearch)
Determine a suggested value from any of the given candidate annotations.

### extractValue

protected Object extractValue(org.springframework.core.annotation.AnnotationAttributes attr)
Extract the value attribute from the given annotation.

Since:
  4.3