org.springframework.beans.factory.annotation
Class QualifierAnnotationAutowireCandidateResolver

java.lang.Object
  extended by 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
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
 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 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.