org.springframework.beans.factory.config

## 接口 SmartInstantiationAwareBeanPostProcessor

- 所有超级接口:
    BeanPostProcessor, InstantiationAwareBeanPostProcessor
  所有已知实现类:
    AutowiredAnnotationBeanPostProcessor, InstantiationAwareBeanPostProcessorAdapter, RequiredAnnotationBeanPostProcessor

      public interface SmartInstantiationAwareBeanPostProcessor
      extends InstantiationAwareBeanPostProcessor

  Extension of the `InstantiationAwareBeanPostProcessor` interface, adding a callback for predicting the eventual type of a processed bean.

  NOTE: This interface is a special purpose interface, mainly for internal use within the framework. In general, application-provided post-processors should simply implement the plain `BeanPostProcessor` interface or derive from the `InstantiationAwareBeanPostProcessorAdapter` class. New methods might be added to this interface even in point releases.

  从以下版本开始:
    2.0.3
  作者:
    Juergen Hoeller
  另请参阅:
    `InstantiationAwareBeanPostProcessorAdapter`

- - ### 方法概要

    所有方法 实例方法 默认方法
    限定符和类型 | 方法和说明
    --- | ---
    `default Constructor<?>[]` | `determineCandidateConstructors(Class<?> beanClass, String beanName)` Determine the candidate constructors to use for the given bean.
    `default Object` | `getEarlyBeanReference(Object bean, String beanName)` Obtain a reference for early access to the specified bean, typically for the purpose of resolving a circular reference.
    `default Class<?>` | `predictBeanType(Class<?> beanClass, String beanName)` Predict the type of the bean to be eventually returned from this processor's `InstantiationAwareBeanPostProcessor.postProcessBeforeInstantiation(java.lang.Class<?>, java.lang.String)` callback.

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

      `postProcessAfterInstantiation, postProcessBeforeInstantiation, postProcessPropertyValues`

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

      `postProcessAfterInitialization, postProcessBeforeInitialization`

- - ### 方法详细资料

    - #### predictBeanType

          @Nullable
          default Class<?> predictBeanType(Class<?> beanClass,
                                                      String beanName)
                                               throws BeansException

      Predict the type of the bean to be eventually returned from this processor's `InstantiationAwareBeanPostProcessor.postProcessBeforeInstantiation(java.lang.Class<?>, java.lang.String)` callback.

      The default implementation returns `null`.

      参数:
        `beanClass` - the raw class of the bean
        `beanName` - the name of the bean
      返回:
        the type of the bean, or `null` if not predictable
      抛出:
        `BeansException` - in case of errors

    - #### determineCandidateConstructors

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

      Determine the candidate constructors to use for the given bean.

      The default implementation returns `null`.

      参数:
        `beanClass` - the raw class of the bean (never `null`)
        `beanName` - the name of the bean
      返回:
        the candidate constructors, or `null` if none specified
      抛出:
        `BeansException` - in case of errors

    - #### getEarlyBeanReference

          default Object getEarlyBeanReference(Object bean,
                                               String beanName)
                                        throws BeansException

      Obtain a reference for early access to the specified bean, typically for the purpose of resolving a circular reference.

      This callback gives post-processors a chance to expose a wrapper early - that is, before the target bean instance is fully initialized. The exposed object should be equivalent to the what `BeanPostProcessor.postProcessBeforeInitialization(java.lang.Object, java.lang.String)` / `BeanPostProcessor.postProcessAfterInitialization(java.lang.Object, java.lang.String)` would expose otherwise. Note that the object returned by this method will be used as bean reference unless the post-processor returns a different wrapper from said post-process callbacks. In other words: Those post-process callbacks may either eventually expose the same reference or alternatively return the raw bean instance from those subsequent callbacks (if the wrapper for the affected bean has been built for a call to this method already, it will be exposes as final bean reference by default).

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

      参数:
        `bean` - the raw bean instance
        `beanName` - the name of the bean
      返回:
        the object to expose as bean reference (typically with the passed-in bean instance as default)
      抛出:
        `BeansException` - in case of errors