4

起動時に多数のオブジェクトを作成するファクトリ風の Bean があり、これらのオブジェクト自体を Spring Bean にしたいと考えています。

単一のオブジェクトを作成する場合、ファクトリ メソッドを使用してインスタンス化できます。(Spring ドキュメントのセクション 4.3.2.3 から):

<!-- the factory bean, which contains a method called createInstance() -->
<bean id="serviceLocator" class="examples.DefaultServiceLocator">
  <!-- inject any dependencies required by this locator bean -->
</bean>

<!-- the bean to be created via the factory bean -->
<bean id="clientService"
      factory-bean="serviceLocator"
      factory-method="createClientServiceInstance"/>

n 個のオブジェクトがあることを前もって知っていれば、n 個の異なるメソッドを呼び出すことができますが、そうではありません。私のファクトリは、前もって知られていない任意の数のオブジェクトを作成します。

誰もこれを行う方法を知っていますか?

目標は、上記のような「適切な」Spring Bean になることです。具体的には、ソースとターゲットの両方として自動配線の対象となる必要があります。これは、コレクションを返すだけでなく、それを Bean にしたいという意味ではないことに注意してください。

XML 構成の Spring 3.1 を使用しています。

4

1 に答える 1

1

動的な Bean の作成が必要なようです...

これまでに試したことはありませんが、この質問で述べたように、BeanDefinitionBuilderを使用してみてください。必要なものはすべて揃っているようです。ファクトリ Bean から使用します (現在、ファクトリ Bean として定義する必要はありません)。

編集:ここで良い使用例を見つけました。

何かのようなもの:

String className = ... // get class name from wherever you get it

// Build your dynamic bean:
BeanDefinitionBuilder bdb = BeanDefinitionBuilder.genericBeanDefinition(className);
bdb.setSingleton(true);
// add dependencies:
bdb.addDependsOn(dependeeBeanName);
// Eventually - validate it and get it:
AbstractBeanDefinitionb bean = db.getBeanDefinition();

// I guess only now you get other already existing beans
// and make them depend on the one you created in the same way
于 2012-04-26T23:14:48.737 に答える