クラス ObjectFactoryCreatingFactoryBean

java.lang.ObjectSE
org.springframework.beans.factory.config.AbstractFactoryBean<ObjectFactory<ObjectSE>>
org.springframework.beans.factory.config.ObjectFactoryCreatingFactoryBean
実装されたすべてのインターフェース:
AwareBeanClassLoaderAwareBeanFactoryAwareDisposableBeanFactoryBean<ObjectFactory<ObjectSE>>InitializingBean

public class ObjectFactoryCreatingFactoryBean extends AbstractFactoryBean<ObjectFactory<ObjectSE>>
ObjectFactory である値を返す FactoryBean 実装は、BeanFactory をソースとする Bean を返します。

そのため、これを使用して、クライアントオブジェクトが BeanFactory.getBean(String) を直接呼び出して、BeanFactory から(通常はプロトタイプ)Bean を取得するのを防ぐことができます。これは、制御原理の反転に違反します。代わりに、このクラスを使用して、クライアントオブジェクトに、1 つのターゲット Bean(これも通常はプロトタイプ Bean)のみを直接返すプロパティとして ObjectFactory インスタンスを供給することができます。

XML ベースの BeanFactory のサンプル構成は次のようになります。

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

アテンダント MyClientBean クラスの実装は次のようになります。

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...
   }
 }

オブジェクト作成パターンのこのアプリケーションへの代替アプローチは、ServiceLocatorFactoryBean を使用して(プロトタイプ)Bean を調達することです。ServiceLocatorFactoryBean アプローチには、ObjectFactory などの Spring 固有のインターフェースに依存する必要がないという利点がありますが、ランタイムクラスの生成が必要になるという欠点があります。この課題の詳細については、ServiceLocatorFactoryBean JavaDoc を参照してください。

導入:
1.0.2
作成者:
Colin Sampaleanu, Juergen Hoeller
関連事項:
  • コンストラクターの詳細

    • ObjectFactoryCreatingFactoryBean

      public ObjectFactoryCreatingFactoryBean()
  • メソッドの詳細

    • setTargetBeanName

      public void setTargetBeanName(StringSE targetBeanName)
      ターゲット Bean の名前を設定します。

      ターゲットは非シングルトン Bean である必要はありません、現実的には常にそうです(ターゲット Bean がシングルトンである場合、そのシングルトン Bean は依存オブジェクトに直接注入できるため、追加のレベルの必要性がなくなります)このファクトリアプローチによって提供される間接参照)。

    • afterPropertiesSet

      public void afterPropertiesSet() throws ExceptionSE
      クラスからコピーされた説明: AbstractFactoryBean
      必要に応じて、シングルトンインスタンスを積極的に作成します。
      次で指定:
      インターフェース InitializingBeanafterPropertiesSet 
      オーバーライド:
      クラス AbstractFactoryBean<ObjectFactory<ObjectSE>>afterPropertiesSet 
      例外:
      ExceptionSE - 構成の誤り(必須プロパティの設定の失敗など)の場合、またはその他の理由で初期化が失敗した場合
    • getObjectType

      public ClassSE<?> getObjectType()
      クラスからコピーされた説明: AbstractFactoryBean
      この抽象メソッドの宣言は、FactoryBean インターフェースのメソッドを反映しており、抽象テンプレートメソッドを一貫して提供します。
      次で指定:
      インターフェース FactoryBean<ObjectFactory<ObjectSE>>getObjectType 
      次で指定:
      クラス AbstractFactoryBean<ObjectFactory<ObjectSE>>getObjectType 
      戻り値:
      この FactoryBean が作成するオブジェクトの型、または呼び出し時に不明な場合は null 
      関連事項:
    • createInstance

      protected ObjectFactory<ObjectSE> createInstance()
      クラスからコピーされた説明: AbstractFactoryBean
      このファクトリによって返されるオブジェクトを構築するためにサブクラスがオーバーライドする必要があるテンプレートメソッド。

      シングルトンの場合はこの FactoryBean の初期化時に呼び出され、そうでない場合は各 AbstractFactoryBean.getObject() コール時に呼び出されます。

      次で指定:
      クラス AbstractFactoryBean<ObjectFactory<ObjectSE>>createInstance 
      戻り値:
      このファクトリによって返されたオブジェクト
      関連事項: