Class AutowiredAnnotationBeanPostProcessor
- All Implemented Interfaces:
- BeanRegistrationAotProcessor,- Aware,- BeanFactoryAware,- BeanPostProcessor,- InstantiationAwareBeanPostProcessor,- SmartInstantiationAwareBeanPostProcessor,- MergedBeanDefinitionPostProcessor,- Ordered,- PriorityOrdered
BeanPostProcessor
 implementation that autowires annotated fields, setter methods, and arbitrary
 config methods. Such members to be injected are detected through annotations:
 by default, Spring's @Autowired and @Value
 annotations.
 Also supports the common @Inject annotation,
 if available, as a direct alternative to Spring's own @Autowired.
 Additionally, it retains support for the javax.inject.Inject variant
 dating back to the original JSR-330 specification (as known from Java EE 6-8).
 
Autowired Constructors
Only one constructor of any given bean class may declare this annotation with
 the 'required' attribute set to true, indicating the constructor
 to autowire when used as a Spring bean. Furthermore, if the 'required' attribute
 is set to true, only a single constructor may be annotated with
 @Autowired. If multiple non-required constructors declare 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 primary/default constructor (if present) will be used. If a class only
 declares a single constructor to begin with, it will always be used, even if not
 annotated. An annotated constructor does not have to be public.
 
Autowired Fields
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.
Autowired Methods
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. Config methods do not have to be public.
Annotation Config vs. XML Config
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.
@Lookup Methods
In addition to regular injection points as discussed above, this post-processor
 also handles Spring's @Lookup annotation which identifies lookup
 methods to be replaced by the container at runtime. This is essentially a type-safe
 version of getBean(Class, args) and getBean(String, args).
 See @Lookup's javadoc for details.
- Since:
- 2.5
- Author:
- Juergen Hoeller, Mark Fisher, Stephane Nicoll, Sebastien Deleuze, Sam Brannen, Phillip Webb
- See Also:
- 
Field SummaryFieldsFields inherited from interface org.springframework.core.OrderedHIGHEST_PRECEDENCE, LOWEST_PRECEDENCE
- 
Constructor SummaryConstructorsConstructorDescriptionCreate a newAutowiredAnnotationBeanPostProcessorfor Spring's standard@Autowiredand@Valueannotations.
- 
Method SummaryModifier and TypeMethodDescriptionClass<?>determineBeanType(Class<?> beanClass, String beanName) Determine the type of the bean to be eventually returned from this processor'sInstantiationAwareBeanPostProcessor.postProcessBeforeInstantiation(java.lang.Class<?>, java.lang.String)callback.Constructor<?>[]determineCandidateConstructors(Class<?> beanClass, String beanName) Determine the candidate constructors to use for the given bean.protected booleanDetermine if the annotated field or method requires its dependency.intgetOrder()Get the order value of this object.voidpostProcessMergedBeanDefinition(RootBeanDefinition beanDefinition, Class<?> beanType, String beanName) Post-process the given merged bean definition for the specified bean.postProcessProperties(PropertyValues pvs, Object bean, String beanName) Post-process the given property values before the factory applies them to the given bean.processAheadOfTime(RegisteredBean registeredBean) Process the givenRegisteredBeaninstance ahead-of-time and return a contribution ornull.voidprocessInjection(Object bean) 'Native' processing method for direct calls with an arbitrary target instance, resolving all of its fields and methods which are annotated with one of the configured 'autowired' annotation types.voidresetBeanDefinition(String beanName) A notification that the bean definition for the specified name has been reset, and that this post-processor should clear any metadata for the affected bean.voidsetAutowiredAnnotationType(Class<? extends Annotation> autowiredAnnotationType) Set the 'autowired' annotation type, to be used on constructors, fields, setter methods, and arbitrary config methods.voidsetAutowiredAnnotationTypes(Set<Class<? extends Annotation>> autowiredAnnotationTypes) Set the 'autowired' annotation types, to be used on constructors, fields, setter methods, and arbitrary config methods.voidsetBeanFactory(BeanFactory beanFactory) Callback that supplies the owning factory to a bean instance.voidsetOrder(int order) voidsetRequiredParameterName(String requiredParameterName) Set the name of an attribute of the annotation that specifies whether it is required.voidsetRequiredParameterValue(boolean requiredParameterValue) Set the boolean value that marks a dependency as required.Methods inherited from class java.lang.Objectclone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface org.springframework.beans.factory.config.BeanPostProcessorpostProcessAfterInitialization, postProcessBeforeInitializationMethods inherited from interface org.springframework.beans.factory.aot.BeanRegistrationAotProcessorisBeanExcludedFromAotProcessingMethods inherited from interface org.springframework.beans.factory.config.InstantiationAwareBeanPostProcessorpostProcessAfterInstantiation, postProcessBeforeInstantiationMethods inherited from interface org.springframework.beans.factory.config.SmartInstantiationAwareBeanPostProcessorgetEarlyBeanReference, predictBeanType
- 
Field Details- 
logger
 
- 
- 
Constructor Details- 
AutowiredAnnotationBeanPostProcessorpublic AutowiredAnnotationBeanPostProcessor()Create a newAutowiredAnnotationBeanPostProcessorfor Spring's standard@Autowiredand@Valueannotations.Also supports the common @Injectannotation, if available, as well as the originaljavax.inject.Injectvariant.
 
- 
- 
Method Details- 
setAutowiredAnnotationTypeSet the 'autowired' annotation type, to be used on constructors, fields, setter methods, and arbitrary config methods.The default autowired annotation types are the Spring-provided @Autowiredand@Valueannotations as well as the common@Injectannotation, if available.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. 
- 
setAutowiredAnnotationTypesSet the 'autowired' annotation types, to be used on constructors, fields, setter methods, and arbitrary config methods.The default autowired annotation types are the Spring-provided @Autowiredand@Valueannotations as well as the common@Injectannotation, if available.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. 
- 
setRequiredParameterNameSet the name of an attribute of the annotation that specifies whether it is required.- See Also:
 
- 
setRequiredParameterValuepublic 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 befalse.- See Also:
 
- 
setOrderpublic void setOrder(int order) 
- 
getOrderpublic int getOrder()Description copied from interface:OrderedGet the order value of this object.Higher values are interpreted as lower priority. As a consequence, the object with the lowest value has the highest priority (somewhat analogous to Servlet load-on-startupvalues).Same order values will result in arbitrary sort positions for the affected objects. 
- 
setBeanFactoryDescription copied from interface:BeanFactoryAwareCallback 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:
- setBeanFactoryin interface- BeanFactoryAware
- Parameters:
- beanFactory- owning BeanFactory (never- null). The bean can immediately call methods on the factory.
- See Also:
 
- 
postProcessMergedBeanDefinitionpublic void postProcessMergedBeanDefinition(RootBeanDefinition beanDefinition, Class<?> beanType, String beanName) Description copied from interface:MergedBeanDefinitionPostProcessorPost-process the given merged bean definition for the specified bean.- Specified by:
- postProcessMergedBeanDefinitionin interface- MergedBeanDefinitionPostProcessor
- Parameters:
- beanDefinition- the merged bean definition for the bean
- beanType- the actual type of the managed bean instance
- beanName- the name of the bean
- See Also:
 
- 
processAheadOfTimeDescription copied from interface:BeanRegistrationAotProcessorProcess the givenRegisteredBeaninstance ahead-of-time and return a contribution ornull.Processors are free to use any techniques they like to analyze the given instance. Most typically use reflection to find fields or methods to use in the contribution. Contributions typically generate source code or resource files that can be used when the AOT optimized application runs. If the given instance isn't relevant to the processor, it should return a nullcontribution.- Specified by:
- processAheadOfTimein interface- BeanRegistrationAotProcessor
- Parameters:
- registeredBean- the registered bean to process
- Returns:
- a BeanRegistrationAotContributionornull
 
- 
resetBeanDefinitionDescription copied from interface:MergedBeanDefinitionPostProcessorA notification that the bean definition for the specified name has been reset, and that this post-processor should clear any metadata for the affected bean.The default implementation is empty. - Specified by:
- resetBeanDefinitionin interface- MergedBeanDefinitionPostProcessor
- Parameters:
- beanName- the name of the bean
- See Also:
 
- 
determineBeanTypeDescription copied from interface:SmartInstantiationAwareBeanPostProcessorDetermine the type of the bean to be eventually returned from this processor'sInstantiationAwareBeanPostProcessor.postProcessBeforeInstantiation(java.lang.Class<?>, java.lang.String)callback.The default implementation returns the given bean class as-is. Specific implementations should fully evaluate their processing steps in order to create/initialize a potential proxy class upfront. - Specified by:
- determineBeanTypein interface- SmartInstantiationAwareBeanPostProcessor
- Parameters:
- beanClass- the raw class of the bean
- beanName- the name of the bean
- Returns:
- the type of the bean (never null)
- Throws:
- BeanCreationException
 
- 
determineCandidateConstructors@Nullable public Constructor<?>[] determineCandidateConstructors(Class<?> beanClass, String beanName) throws BeanCreationException Description copied from interface:SmartInstantiationAwareBeanPostProcessorDetermine the candidate constructors to use for the given bean.The default implementation returns null.- Specified by:
- determineCandidateConstructorsin interface- SmartInstantiationAwareBeanPostProcessor
- Parameters:
- beanClass- the raw class of the bean (never- null)
- beanName- the name of the bean
- Returns:
- the candidate constructors, or nullif none specified
- Throws:
- BeanCreationException
 
- 
postProcessPropertiesDescription copied from interface:InstantiationAwareBeanPostProcessorPost-process the given property values before the factory applies them to the given bean.The default implementation returns the given pvsas-is.- Specified by:
- postProcessPropertiesin interface- InstantiationAwareBeanPostProcessor
- Parameters:
- pvs- the property values that the factory is about to apply (never- null)
- 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 the given bean (can be the passed-in
 PropertyValues instance), or nullto skip property population
 
- 
processInjection'Native' processing method for direct calls with an arbitrary target instance, resolving all of its fields and methods which are annotated with one of the configured 'autowired' annotation types.- Parameters:
- bean- the target instance to process
- Throws:
- BeanCreationException- if autowiring failed
- See Also:
 
- 
determineRequiredStatusDetermine 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:
- ann- the Autowired annotation
- Returns:
- whether the annotation indicates that a dependency is required
 
 
-