クラス ObjectFactoryCreatingFactoryBean
- 実装されたすべてのインターフェース:
Aware
、BeanClassLoaderAware
、BeanFactoryAware
、DisposableBean
、FactoryBean<ObjectFactory<ObjectSE>>
、InitializingBean
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
- 関連事項:
フィールドサマリー
クラス org.springframework.beans.factory.config.AbstractFactoryBean から継承されたフィールド
logger
インターフェース org.springframework.beans.factory.FactoryBean から継承されたフィールド
OBJECT_TYPE_ATTRIBUTE
コンストラクターのサマリー
メソッドのサマリー
修飾子と型メソッド説明void
必要に応じて、シングルトンインスタンスを積極的に作成します。protected ObjectFactory<ObjectSE>
このファクトリによって返されるオブジェクトを構築するためにサブクラスがオーバーライドする必要があるテンプレートメソッド。ClassSE<?>
この抽象メソッドの宣言は、FactoryBean インターフェースのメソッドを反映しており、抽象テンプレートメソッドを一貫して提供します。void
setTargetBeanName
(StringSE targetBeanName) ターゲット Bean の名前を設定します。クラス org.springframework.beans.factory.config.AbstractFactoryBean から継承されたメソッド
destroy, destroyInstance, getBeanFactory, getBeanTypeConverter, getEarlySingletonInterfaces, getObject, isSingleton, setBeanClassLoader, setBeanFactory, setSingleton
コンストラクターの詳細
ObjectFactoryCreatingFactoryBean
public ObjectFactoryCreatingFactoryBean()
メソッドの詳細
setTargetBeanName
ターゲット Bean の名前を設定します。ターゲットは非シングルトン Bean である必要はありませんが、現実的には常にそうです(ターゲット Bean がシングルトンである場合、そのシングルトン Bean は依存オブジェクトに直接注入できるため、追加のレベルの必要性がなくなります)このファクトリアプローチによって提供される間接参照)。
afterPropertiesSet
クラスからコピーされた説明:AbstractFactoryBean
必要に応じて、シングルトンインスタンスを積極的に作成します。- 次で指定:
- インターフェース
InitializingBean
のafterPropertiesSet
- オーバーライド:
- クラス
AbstractFactoryBean<ObjectFactory<ObjectSE>>
のafterPropertiesSet
- 例外:
ExceptionSE
- 構成の誤り(必須プロパティの設定の失敗など)の場合、またはその他の理由で初期化が失敗した場合
getObjectType
クラスからコピーされた説明:AbstractFactoryBean
この抽象メソッドの宣言は、FactoryBean インターフェースのメソッドを反映しており、抽象テンプレートメソッドを一貫して提供します。- 次で指定:
- インターフェース
FactoryBean<ObjectFactory<ObjectSE>>
のgetObjectType
- 次で指定:
- クラス
AbstractFactoryBean<ObjectFactory<ObjectSE>>
のgetObjectType
- 戻り値:
- この FactoryBean が作成するオブジェクトの型、または呼び出し時に不明な場合は
null
- 関連事項:
createInstance
クラスからコピーされた説明:AbstractFactoryBean
このファクトリによって返されるオブジェクトを構築するためにサブクラスがオーバーライドする必要があるテンプレートメソッド。シングルトンの場合はこの FactoryBean の初期化時に呼び出され、そうでない場合は各
AbstractFactoryBean.getObject()
コール時に呼び出されます。- 次で指定:
- クラス
AbstractFactoryBean<ObjectFactory<ObjectSE>>
のcreateInstance
- 戻り値:
- このファクトリによって返されたオブジェクト
- 関連事項: