org.springframework.beans.factory.annotation

## 类 AutowiredAnnotationBeanPostProcessor

- java.lang.Object
- - org.springframework.beans.factory.config.InstantiationAwareBeanPostProcessorAdapter
  - - org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor

- 所有已实现的接口:
    Aware, BeanFactoryAware, BeanPostProcessor, InstantiationAwareBeanPostProcessor, SmartInstantiationAwareBeanPostProcessor, MergedBeanDefinitionPostProcessor, org.springframework.core.Ordered, org.springframework.core.PriorityOrdered

      public class AutowiredAnnotationBeanPostProcessor
      extends InstantiationAwareBeanPostProcessorAdapter
      implements MergedBeanDefinitionPostProcessor, org.springframework.core.PriorityOrdered, BeanFactoryAware

  `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` and `@Value` annotations.

  Also supports JSR-330's `@Inject` annotation, if available, as a direct alternative to Spring's own `@Autowired`.

  Only one constructor (at max) of any given bean class may declare 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 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.

  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. Config methods do not have to be public.

  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.

  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.

  从以下版本开始:
    2.5
  作者:
    Juergen Hoeller, Mark Fisher, Stephane Nicoll, Sebastien Deleuze
  另请参阅:
    `setAutowiredAnnotationType(java.lang.Class<? extends java.lang.annotation.Annotation>)`, `Autowired`, `Value`

- - ### 字段概要

    字段
    限定符和类型 | 字段和说明
    --- | ---
    `protected Log` | `logger`

    - ### 从接口继承的字段 org.springframework.core.Ordered

      `HIGHEST_PRECEDENCE, LOWEST_PRECEDENCE`

  - ### 构造器概要

    构造器
    构造器和说明
    `AutowiredAnnotationBeanPostProcessor()` Create a new AutowiredAnnotationBeanPostProcessor for Spring's standard `Autowired` annotation.

  - ### 方法概要

    所有方法 实例方法 具体方法
    限定符和类型 | 方法和说明
    --- | ---
    `Constructor<?>[]` | `determineCandidateConstructors(Class<?> beanClass, String beanName)` Determine the candidate constructors to use for the given bean.
    `protected boolean` | `determineRequiredStatus(org.springframework.core.annotation.AnnotationAttributes ann)` Determine if the annotated field or method requires its dependency.
    `protected <T> Map<String,T>` | `findAutowireCandidates(Class<T> type)` Obtain all beans of the given type as autowire candidates.
    `int` | `getOrder()`
    `void` | `postProcessMergedBeanDefinition(RootBeanDefinition beanDefinition, Class<?> beanType, String beanName)` Post-process the given merged bean definition for the specified bean.
    `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`.

    - ### 从类继承的方法 org.springframework.beans.factory.config.InstantiationAwareBeanPostProcessorAdapter

      `getEarlyBeanReference, postProcessAfterInitialization, postProcessAfterInstantiation, postProcessBeforeInitialization, postProcessBeforeInstantiation, predictBeanType`

    - ### 从类继承的方法 java.lang.Object

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

    - ### 从接口继承的方法 org.springframework.beans.factory.config.BeanPostProcessor

      `postProcessAfterInitialization, postProcessBeforeInitialization`

- - ### 字段详细资料

    - #### logger

          protected final Log logger

  - ### 构造器详细资料

    - #### AutowiredAnnotationBeanPostProcessor

          public AutowiredAnnotationBeanPostProcessor()

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

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

  - ### 方法详细资料

    - #### setAutowiredAnnotationType

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

      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.

    - #### setAutowiredAnnotationTypes

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

      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.

    - #### setRequiredParameterName

          public void setRequiredParameterName(String requiredParameterName)

      Set the name of a parameter of the annotation that specifies whether it is required.
      另请参阅:
        `setRequiredParameterValue(boolean)`

    - #### setRequiredParameterValue

          public 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`.

      另请参阅:
        `setRequiredParameterName(String)`

    - #### setOrder

          public void setOrder(int order)

    - #### getOrder

          public int getOrder()

      指定者:
        `getOrder` 在接口中 `org.springframework.core.Ordered`

    - #### setBeanFactory

          public void setBeanFactory(BeanFactory beanFactory)

      从接口复制的说明: `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.

      指定者:
        `setBeanFactory` 在接口中 `BeanFactoryAware`
      参数:
        `beanFactory` - owning BeanFactory (never `null`). The bean can immediately call methods on the factory.
      另请参阅:
        `BeanInitializationException`

    - #### postProcessMergedBeanDefinition

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

      从接口复制的说明: `MergedBeanDefinitionPostProcessor`
      Post-process the given merged bean definition for the specified bean.
      指定者:
        `postProcessMergedBeanDefinition` 在接口中 `MergedBeanDefinitionPostProcessor`
      参数:
        `beanDefinition` - the merged bean definition for the bean
        `beanType` - the actual type of the managed bean instance
        `beanName` - the name of the bean

    - #### determineCandidateConstructors

          @Nullable
          public Constructor<?>[] determineCandidateConstructors(Class<?> beanClass,
                                                                            String beanName)
                                                                     throws BeanCreationException

      从接口复制的说明: `SmartInstantiationAwareBeanPostProcessor`
      Determine the candidate constructors to use for the given bean.

      The default implementation returns `null`.

      指定者:
        `determineCandidateConstructors` 在接口中 `SmartInstantiationAwareBeanPostProcessor`
      覆盖:
        `determineCandidateConstructors` 在类中 `InstantiationAwareBeanPostProcessorAdapter`
      参数:
        `beanClass` - the raw class of the bean (never `null`)
        `beanName` - the name of the bean
      返回:
        the candidate constructors, or `null` if none specified
      抛出:
        `BeanCreationException`

    - #### postProcessPropertyValues

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

      从接口复制的说明: `InstantiationAwareBeanPostProcessor`
      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.

      The default implementation returns the given `pvs` as-is.

      指定者:
        `postProcessPropertyValues` 在接口中 `InstantiationAwareBeanPostProcessor`
      覆盖:
        `postProcessPropertyValues` 在类中 `InstantiationAwareBeanPostProcessorAdapter`
      参数:
        `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
      返回:
        the actual property values to apply to the given bean (can be the passed-in PropertyValues instance), or `null` to skip property population
      抛出:
        `BeanCreationException`
      另请参阅:
        `MutablePropertyValues`

    - #### processInjection

          public void processInjection(Object bean)
                                throws BeanCreationException

      'Native' processing method for direct calls with an arbitrary target instance, resolving all of its fields and methods which are annotated with `@Autowired`.
      参数:
        `bean` - the target instance to process
      抛出:
        `BeanCreationException` - if autowiring failed

    - #### determineRequiredStatus

          protected boolean determineRequiredStatus(org.springframework.core.annotation.AnnotationAttributes ann)

      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.

      参数:
        `ann` - the Autowired annotation
      返回:
        whether the annotation indicates that a dependency is required

    - #### findAutowireCandidates

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

      Obtain all beans of the given type as autowire candidates.
      参数:
        `type` - the type of the bean
      返回:
        the target beans, or an empty Collection if no bean of this type is found
      抛出:
        `BeansException` - if bean retrieval failed