org.springframework.beans.factory.config

## Class ProviderCreatingFactoryBean

- java.lang.Object
- - org.springframework.beans.factory.config.AbstractFactoryBean<Provider<Object>>
  - - org.springframework.beans.factory.config.ProviderCreatingFactoryBean

- All Implemented Interfaces:
    Aware, BeanClassLoaderAware, BeanFactoryAware, DisposableBean, FactoryBean<Provider<Object>>, InitializingBean

      public class ProviderCreatingFactoryBean
      extends AbstractFactoryBean<Provider<Object>>

  A `FactoryBean` implementation that returns a value which is a JSR-330 `Provider` that in turn returns a bean sourced from a `BeanFactory`.

  This is basically a JSR-330 compliant variant of Spring's good old `ObjectFactoryCreatingFactoryBean`. It can be used for traditional external dependency injection configuration that targets a property or constructor argument of type `javax.inject.Provider`, as an alternative to JSR-330's `@Inject` annotation-driven approach.

  Since:
    3.0.2
  Author:
    Juergen Hoeller
  See Also:
    `Provider`, `ObjectFactoryCreatingFactoryBean`

- - ### Field Summary

    - ### Fields inherited from class org.springframework.beans.factory.config.AbstractFactoryBean

      `logger`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `ProviderCreatingFactoryBean()`

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `void` | `afterPropertiesSet()` Eagerly create the singleton instance, if necessary.
    `protected Provider<Object>` | `createInstance()` Template method that subclasses must override to construct the object returned by this factory.
    `Class<?>` | `getObjectType()` This abstract method declaration mirrors the method in the FactoryBean interface, for a consistent offering of abstract template methods.
    `void` | `setTargetBeanName(String targetBeanName)` Set the name of the target bean.

    - ### Methods inherited from class org.springframework.beans.factory.config.AbstractFactoryBean

      `destroy, destroyInstance, getBeanFactory, getBeanTypeConverter, getEarlySingletonInterfaces, getObject, isSingleton, setBeanClassLoader, setBeanFactory, setSingleton`

    - ### Methods inherited from class java.lang.Object

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

- - ### Constructor Detail

    - #### ProviderCreatingFactoryBean

          public ProviderCreatingFactoryBean()

  - ### Method Detail

    - #### setTargetBeanName

          public void setTargetBeanName(String targetBeanName)

      Set the name of the target bean.

      The target does not have to be a non-singleton bean, but realistically always will be (because if the target bean were a singleton, then said singleton bean could simply be injected straight into the dependent object, thus obviating the need for the extra level of indirection afforded by this factory approach).

    - #### afterPropertiesSet

          public void afterPropertiesSet()
                                  throws Exception

      Description copied from class: `AbstractFactoryBean`
      Eagerly create the singleton instance, if necessary.
      Specified by:
        `afterPropertiesSet` in interface `InitializingBean`
      Overrides:
        `afterPropertiesSet` in class `AbstractFactoryBean<Provider<Object>>`
      Throws:
        `Exception` - in the event of misconfiguration (such as failure to set an essential property) or if initialization fails.

    - #### getObjectType

          public Class<?> getObjectType()

      Description copied from class: `AbstractFactoryBean`
      This abstract method declaration mirrors the method in the FactoryBean interface, for a consistent offering of abstract template methods.
      Specified by:
        `getObjectType` in interface `FactoryBean<Provider<Object>>`
      Specified by:
        `getObjectType` in class `AbstractFactoryBean<Provider<Object>>`
      Returns:
        the type of object that this FactoryBean creates, or `null` if not known at the time of the call
      See Also:
        `FactoryBean.getObjectType()`

    - #### createInstance

          protected Provider<Object> createInstance()

      Description copied from class: `AbstractFactoryBean`
      Template method that subclasses must override to construct the object returned by this factory.

      Invoked on initialization of this FactoryBean in case of a singleton; else, on each `AbstractFactoryBean.getObject()` call.

      Specified by:
        `createInstance` in class `AbstractFactoryBean<Provider<Object>>`
      Returns:
        the object returned by this factory
      See Also:
        `AbstractFactoryBean.getObject()`