org.springframework.beans.factory.config

## 类 ObjectFactoryCreatingFactoryBean

- java.lang.Object
- - org.springframework.beans.factory.config.AbstractFactoryBean<ObjectFactory<Object>>
  - - org.springframework.beans.factory.config.ObjectFactoryCreatingFactoryBean

- 所有已实现的接口:
    Aware, BeanClassLoaderAware, BeanFactoryAware, DisposableBean, FactoryBean<ObjectFactory<Object>>, InitializingBean

      public class ObjectFactoryCreatingFactoryBean
      extends AbstractFactoryBean<ObjectFactory<Object>>

  A `FactoryBean` implementation that returns a value which is an `ObjectFactory` that in turn returns a bean sourced from a `BeanFactory`.

  As such, this may be used to avoid having a client object directly calling `BeanFactory.getBean(String)` to get a (typically prototype) bean from a `BeanFactory`, which would be a violation of the inversion of control principle. Instead, with the use of this class, the client object can be fed an `ObjectFactory` instance as a property which directly returns only the one target bean (again, which is typically a prototype bean).

  A sample config in an XML-based `BeanFactory` might look as follows:

      <beans>

         <!-- Prototype bean since we have state -->
         <bean id="myService" class="a.b.c.MyService" scope="prototype"/>

         <bean id="myServiceFactory"
             class="org.springframework.beans.factory.config.ObjectFactoryCreatingFactoryBean">
           <property name="targetBeanName"><idref local="myService"/></property>
         </bean>

         <bean id="clientBean" class="a.b.c.MyClientBean">
           <property name="myServiceFactory" ref="myServiceFactory"/>
         </bean>

      </beans>

  The attendant `MyClientBean` class implementation might look something like this:

      package a.b.c;

       import org.springframework.beans.factory.ObjectFactory;

       public class MyClientBean {

         private ObjectFactory<MyService> myServiceFactory;

         public void setMyServiceFactory(ObjectFactory<MyService> myServiceFactory) {
           this.myServiceFactory = myServiceFactory;
         }

         public void someBusinessMethod() {
           // get a 'fresh', brand new MyService instance
           MyService service = this.myServiceFactory.getObject();
           // use the service object to effect the business logic...
         }
       }

  An alternate approach to this application of an object creational pattern would be to use the `ServiceLocatorFactoryBean` to source (prototype) beans. The `ServiceLocatorFactoryBean` approach has the advantage of the fact that one doesn't have to depend on any Spring-specific interface such as `ObjectFactory`, but has the disadvantage of requiring runtime class generation. Please do consult the `ServiceLocatorFactoryBean JavaDoc` for a fuller discussion of this issue.

  从以下版本开始:
    1.0.2
  作者:
    Colin Sampaleanu, Juergen Hoeller
  另请参阅:
    `ObjectFactory`, `ServiceLocatorFactoryBean`

- - ### 字段概要

    - ### 从类继承的字段 org.springframework.beans.factory.config.AbstractFactoryBean

      `logger`

  - ### 构造器概要

    构造器
    构造器和说明
    `ObjectFactoryCreatingFactoryBean()`

  - ### 方法概要

    所有方法 实例方法 具体方法
    限定符和类型 | 方法和说明
    --- | ---
    `void` | `afterPropertiesSet()` Eagerly create the singleton instance, if necessary.
    `protected ObjectFactory<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.

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

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

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

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

- - ### 构造器详细资料

    - #### ObjectFactoryCreatingFactoryBean

          public ObjectFactoryCreatingFactoryBean()

  - ### 方法详细资料

    - #### 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

      从类复制的说明: `AbstractFactoryBean`
      Eagerly create the singleton instance, if necessary.
      指定者:
        `afterPropertiesSet` 在接口中 `InitializingBean`
      覆盖:
        `afterPropertiesSet` 在类中 `AbstractFactoryBean<ObjectFactory<Object>>`
      抛出:
        `Exception` - in the event of misconfiguration (such as failure to set an essential property) or if initialization fails for any other reason

    - #### getObjectType

          public Class<?> getObjectType()

      从类复制的说明: `AbstractFactoryBean`
      This abstract method declaration mirrors the method in the FactoryBean interface, for a consistent offering of abstract template methods.
      指定者:
        `getObjectType` 在接口中 `FactoryBean<ObjectFactory<Object>>`
      指定者:
        `getObjectType` 在类中 `AbstractFactoryBean<ObjectFactory<Object>>`
      返回:
        the type of object that this FactoryBean creates, or `null` if not known at the time of the call
      另请参阅:
        `FactoryBean.getObjectType()`

    - #### createInstance

          protected ObjectFactory<Object> createInstance()

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

      指定者:
        `createInstance` 在类中 `AbstractFactoryBean<ObjectFactory<Object>>`
      返回:
        the object returned by this factory
      另请参阅:
        `AbstractFactoryBean.getObject()`