org.springframework.beans.factory.annotation

## Class QualifierAnnotationAutowireCandidateResolver

- java.lang.Object
- - org.springframework.beans.factory.annotation.QualifierAnnotationAutowireCandidateResolver

All Implemented Interfaces:
  Aware, BeanFactoryAware, AutowireCandidateResolver

    public class QualifierAnnotationAutowireCandidateResolver
    extends Object
    implements AutowireCandidateResolver, BeanFactoryAware

`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, if available.

Since:
  2.5
Author:
  Mark Fisher, Juergen Hoeller
See Also:
  `AutowireCandidateQualifier`, `Qualifier`, `Value`

### Constructor Summary

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

Methods
`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(Annotation valueAnnotation)` Extract the value attribute from the given annotation.
`protected Object` `findValue(Annotation[] annotationsToSearch)` Determine a suggested value from any of the given candidate annotations.
`Object` `getSuggestedValue(DependencyDescriptor descriptor)` Determine whether the given dependency carries a value annotation.
`boolean` `isAutowireCandidate(BeanDefinitionHolder bdHolder, DependencyDescriptor descriptor)` Determine whether the provided bean definition is an autowire candidate.
`protected boolean` `isQualifier(Class<? extends Annotation> annotationType)` Checks whether the given annotation type is a recognized qualifier type.
`void` `setBeanFactory(BeanFactory beanFactory)` Callback that supplies the owning factory to a bean instance.
`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 java.lang.Object

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

### Constructor Detail

#### QualifierAnnotationAutowireCandidateResolver

    public QualifierAnnotationAutowireCandidateResolver()

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

Also supports JSR-330's `Qualifier` annotation, 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 Detail

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

#### setBeanFactory

    public void setBeanFactory(BeanFactory beanFactory)

Description copied from interface: `BeanFactoryAware`
Callback that supplies the owning factory to a bean instance.

Invoked after the population of normal bean properties but before an initialization callback such as `InitializingBean.afterPropertiesSet()` or a custom init-method.

Specified by:
  `setBeanFactory` in interface `BeanFactoryAware`
Parameters:
  `beanFactory` - owning BeanFactory (never `null`). The bean can immediately call methods on the factory.
See Also:
  `BeanInitializationException`

#### 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 fallback to match against the bean name or an alias if a qualifier or attribute does not match.

Specified by:
  `isAutowireCandidate` in interface `AutowireCandidateResolver`
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

    protected boolean checkQualifiers(BeanDefinitionHolder bdHolder,
                          Annotation[] annotationsToSearch)

Match the given qualifier annotations against the candidate bean definition.

#### isQualifier

    protected boolean isQualifier(Class<? extends Annotation> annotationType)

Checks 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.

#### getSuggestedValue

    public Object getSuggestedValue(DependencyDescriptor descriptor)

Determine whether the given dependency carries a value annotation.

Specified by:
  `getSuggestedValue` in interface `AutowireCandidateResolver`
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

    protected Object findValue(Annotation[] annotationsToSearch)

Determine a suggested value from any of the given candidate annotations.

#### extractValue

    protected Object extractValue(Annotation valueAnnotation)

Extract the value attribute from the given annotation.