0

私は次のようなBeanファクトリクラスを持っています:

public class BeanFactory {
public static BeanInterface getInstance(int id) {
    return new Bean(id);
    }
}

このクラスをSpringコンテナで使用して、Instrumentクラスのインスタンスを取得し、applicationcontext.xml次のようにBeanエントリを追加しました。

<bean id="TestBean" class="com.test.beans.BeanFactory" factory-method="getInstance">
</bean>

getInstanceしかし、IDをファクトリメソッドに渡す方法を見つけることができません。このファクトリメソッドにパラメータを渡す方法はありますか?

編集: Beanファクトリをscope="prototype"と見なします。TestBeanIDの値に基づいたの新しいインスタンスが必要です。

4

4 に答える 4

1

完全な解決策は次のとおりです。

Beanエントリ:

<bean id="TestBean"  class="com.test.beans.BeanFactory" factory-method="getInstance" abstract="false" singleton="false" >
</bean>

コードでBeanを取得する:

TestBeanInterface visitingLocation = (TestBeanInterface)    ctx.getBean("TestBean",42); //passing the argument for static method
于 2013-01-15T10:24:34.590 に答える
0

<constructor-arg>要素を使用して、パラメータをファクトリメソッドに渡すことができます。

<bean id="TestBean" class="com.test.beans.BeanFactory" factory-method="getInstance">
    <constructor-arg value = "42" />
</bean>
于 2013-01-15T08:49:25.783 に答える
0

ルールは通常のSpringコンストラクターと同じです。つまり、次を使用できます。<contructor-arg value="..."/>

ドキュメントから

静的ファクトリメソッドへの引数は、コンストラクタが実際に使用された場合とまったく同じように、要素を介して提供されます。ファクトリメソッドによって返されるクラスの型は、静的ファクトリメソッドを含むクラスと同じ型である必要はありませんが、この例では同じです。インスタンス(非静的)ファクトリメソッドは、基本的に同じ方法で使用されるため(class属性の代わりにfactory-bean属性を使用することを除けば)、ここでは詳細を説明しません。

于 2013-01-15T08:50:16.103 に答える
0

クラスインスタンス(別のBean)をパラメータとして渡すことができます。

<bean id="TestBean" class="com.test.beans.BeanFactory" factory-method="getInstance">
    <property name="beanBuilder" ref="BeanBuilder"/>
</bean>

<bean id="BeanBuilder" class="com.test.beans.SelectedBeanBuilder"/>
于 2013-01-15T08:52:24.367 に答える