ファクトリBeanに問題は見られないので、次のようにします。
import org.springframework.beans.factory.FactoryBean;
import org.springframework.stereotype.Component;
@Component
public class X {
public static class XFactory implements FactoryBean<X> {
@Override
public X getObject() throws Exception {
return new X();
}
@Override
public Class<?> getObjectType() {
return X.class;
}
@Override
public boolean isSingleton() {
return false;
}
}
}
このファクトリービーンを注入します。
それ以外の場合は、XBeanのスコープを設定できます
@Scope(proxyMode=ScopedProxyMode.TARGET_CLASS, value=ConfigurableBeanFactory.SCOPE_PROTOTYPE)
Springが常に新しいインスタンスをシングルトンに返すプロキシを作成するように、デフォルト以外のプロキシモードを使用する必要があります。
XML構成を使用している場合は、次のようにします。
<bean id="x" class="X" scope="prototype">
<aop:scoped-proxy>
</bean>
楽しむ。
編集:
@Componentを介してファクトリに注釈を付ける場合(上記で追加しました)、#isSingletonでfalseを返し、Xを2回返さないように注意して、@Autowiredを使用してファクトリBeanをシングルトンに注入できます。
そうでなければ私はちょうどチェックしました
import org.springframework.context.annotation.Scope;
import org.springframework.context.annotation.ScopedProxyMode;
import org.springframework.stereotype.Component;
@Component
@Scope(value="prototype", proxyMode=ScopedProxyMode.TARGET_CLASS)
public class X {
}
期待どおりに動作します。
編集2:
ファクトリBeanを注入せずに依存関係を注入したい場合は、ファクトリのスコープをプロトタイプ化できます(@Scope(proxyMode = ScopedProxyMode.TARGET_CLASS、value = "prototype"))が、Xよりも毎回新しいファクトリが作成されます。おそらくあなたが望むものではないが関与しています。
工場自体を注入したくない場合は、Oliversルックアップメソッドを使用します。