public class

AutowiredAnnotationBeanPostProcessor

extends InstantiationAwareBeanPostProcessorAdapter
implements BeanFactoryAware MergedBeanDefinitionPostProcessor PriorityOrdered
java.lang.Object
   ↳ org.springframework.beans.factory.config.InstantiationAwareBeanPostProcessorAdapter
     ↳ org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor

Class Overview

BeanPostProcessor implementation that autowires annotated fields, setter methods and arbitrary config methods. Such members to be injected are detected through a Java 5 annotation: by default, Spring's Autowired annotation.

Only one constructor (at max) of any given bean class may carry this annotation with the 'required' parameter set to true, indicating the constructor to autowire when used as a Spring bean. If multiple non-required constructors carry the annotation, they will be considered as candidates for autowiring. The constructor with the greatest number of dependencies that can be satisfied by matching beans in the Spring container will be chosen. If none of the candidates can be satisfied, then a default constructor (if present) will be used. An annotated constructor does not have to be public.

Fields are injected right after construction of a bean, before any config methods are invoked. Such a config field does not have to be public.

Config methods may have an arbitrary name and any number of arguments; each of those arguments will be autowired with a matching bean in the Spring container. Bean property setter methods are effectively just a special case of such a general config method. Such config methods do not have to be public.

Also supports JSR-330's javax.inject.Inject annotation, if available.

Note: A default AutowiredAnnotationBeanPostProcessor will be registered by the "context:annotation-config" and "context:component-scan" XML tags. Remove or turn off the default annotation configuration there if you intend to specify a custom AutowiredAnnotationBeanPostProcessor bean definition.

NOTE: Annotation injection will be performed before XML injection; thus the latter configuration will override the former for properties wired through both approaches.

Summary

[Expand]
Inherited Constants
From interface org.springframework.core.Ordered
Fields
protected final Log logger
Public Constructors
AutowiredAnnotationBeanPostProcessor()
Create a new AutowiredAnnotationBeanPostProcessor for Spring's standard Autowired annotation.
Public Methods
Constructor[] determineCandidateConstructors(Class beanClass, String beanName)
int getOrder()
Return the order value of this object, with a higher value meaning greater in terms of sorting.
void postProcessMergedBeanDefinition(RootBeanDefinition beanDefinition, Class beanType, String beanName)
PropertyValues postProcessPropertyValues(PropertyValues pvs, PropertyDescriptor[] pds, Object bean, String beanName)
Post-process the given property values before the factory applies them to the given bean.
void processInjection(Object bean)
'Native' processing method for direct calls with an arbitrary target instance, resolving all of its fields and methods which are annotated with @Autowired.
void setAutowiredAnnotationType(Class<? extends Annotation> autowiredAnnotationType)
Set the 'autowired' annotation type, to be used on constructors, fields, setter methods and arbitrary config methods.
void setAutowiredAnnotationTypes(Set<Class<? extends Annotation>> autowiredAnnotationTypes)
Set the 'autowired' annotation types, to be used on constructors, fields, setter methods and arbitrary config methods.
void setBeanFactory(BeanFactory beanFactory)
Callback that supplies the owning factory to a bean instance.
void setOrder(int order)
void setRequiredParameterName(String requiredParameterName)
Set the name of a parameter of the annotation that specifies whether it is required.
void setRequiredParameterValue(boolean requiredParameterValue)
Set the boolean value that marks a dependency as required

For example if using 'required=true' (the default), this value should be true; but if using 'optional=false', this value should be false.

Protected Methods
boolean determineRequiredStatus(Annotation annotation)
Determine if the annotated field or method requires its dependency.
<T> Map<String, T> findAutowireCandidates(Class<T> type)
Obtain all beans of the given type as autowire candidates.
[Expand]
Inherited Methods
From class org.springframework.beans.factory.config.InstantiationAwareBeanPostProcessorAdapter
From class java.lang.Object
From interface org.springframework.beans.factory.BeanFactoryAware
From interface org.springframework.beans.factory.config.BeanPostProcessor
From interface org.springframework.beans.factory.config.InstantiationAwareBeanPostProcessor
From interface org.springframework.beans.factory.config.SmartInstantiationAwareBeanPostProcessor
From interface org.springframework.beans.factory.support.MergedBeanDefinitionPostProcessor
From interface org.springframework.core.Ordered

Fields

protected final Log logger

Also: SpringBeans

Public Constructors

public AutowiredAnnotationBeanPostProcessor ()

Also: SpringBeans

Create a new AutowiredAnnotationBeanPostProcessor for Spring's standard Autowired annotation.

Also supports JSR-330's javax.inject.Inject annotation, if available.

Public Methods

public Constructor[] determineCandidateConstructors (Class beanClass, String beanName)

Also: SpringBeans

public int getOrder ()

Also: SpringBeans

Return the order value of this object, with a higher value meaning greater in terms of sorting.

Normally starting with 0, with Integer.MAX_VALUE indicating the greatest value. Same order values will result in arbitrary positions for the affected objects.

Higher values can be interpreted as lower priority. As a consequence, the object with the lowest value has highest priority (somewhat analogous to Servlet "load-on-startup" values).

Returns
  • the order value

public void postProcessMergedBeanDefinition (RootBeanDefinition beanDefinition, Class beanType, String beanName)

Also: SpringBeans

public PropertyValues postProcessPropertyValues (PropertyValues pvs, PropertyDescriptor[] pds, Object bean, String beanName)

Also: SpringBeans

Post-process the given property values before the factory applies them to the given bean. Allows for checking whether all dependencies have been satisfied, for example based on a "Required" annotation on bean property setters.

Also allows for replacing the property values to apply, typically through creating a new MutablePropertyValues instance based on the original PropertyValues, adding or removing specific values.

Parameters
pvs the property values that the factory is about to apply (never null)
pds the relevant property descriptors for the target bean (with ignored dependency types - which the factory handles specifically - already filtered out)
bean the bean instance created, but whose properties have not yet been set
beanName the name of the bean
Returns
  • the actual property values to apply to to the given bean (can be the passed-in PropertyValues instance), or null to skip property population

public void processInjection (Object bean)

Also: SpringBeans

'Native' processing method for direct calls with an arbitrary target instance, resolving all of its fields and methods which are annotated with @Autowired.

Parameters
bean the target instance to process
Throws
BeansException if autowiring failed

public void setAutowiredAnnotationType (Class<? extends Annotation> autowiredAnnotationType)

Also: SpringBeans

Set the 'autowired' annotation type, to be used on constructors, fields, setter methods and arbitrary config methods.

The default autowired annotation type is the Spring-provided Autowired annotation, as well as Value.

This setter property exists so that developers can provide their own (non-Spring-specific) annotation type to indicate that a member is supposed to be autowired.

public void setAutowiredAnnotationTypes (Set<Class<? extends Annotation>> autowiredAnnotationTypes)

Also: SpringBeans

Set the 'autowired' annotation types, to be used on constructors, fields, setter methods and arbitrary config methods.

The default autowired annotation type is the Spring-provided Autowired annotation, as well as Value.

This setter property exists so that developers can provide their own (non-Spring-specific) annotation types to indicate that a member is supposed to be autowired.

public void setBeanFactory (BeanFactory beanFactory)

Also: SpringBeans

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 afterPropertiesSet() or a custom init-method.

Parameters
beanFactory owning BeanFactory (never null). The bean can immediately call methods on the factory.

public void setOrder (int order)

Also: SpringBeans

public void setRequiredParameterName (String requiredParameterName)

Also: SpringBeans

Set the name of a parameter of the annotation that specifies whether it is required.

public void setRequiredParameterValue (boolean requiredParameterValue)

Also: SpringBeans

Set the boolean value that marks a dependency as required

For example if using 'required=true' (the default), this value should be true; but if using 'optional=false', this value should be false.

Protected Methods

protected boolean determineRequiredStatus (Annotation annotation)

Also: SpringBeans

Determine if the annotated field or method requires its dependency.

A 'required' dependency means that autowiring should fail when no beans are found. Otherwise, the autowiring process will simply bypass the field or method when no beans are found.

Parameters
annotation the Autowired annotation
Returns
  • whether the annotation indicates that a dependency is required

protected Map<String, T> findAutowireCandidates (Class<T> type)

Also: SpringBeans

Obtain all beans of the given type as autowire candidates.

Parameters
type the type of the bean
Returns
  • the target beans, or an empty Collection if no bean of this type is found
Throws
BeansException if bean retrieval failed