2011-12-07 5 views
1

次のように私は豆とに落ちています一般的なパターンがある:私は私の人生のためにインスタンスを生成するクリーンな方法であるかを把握することはできませんはシングルトンのメンバー/値の引数を持つプロトタイプBeanを設定

public class PrototypeBean { 
    private SingletonBean singletonBean; 
    private int value; 
    public PrototypeBean(int value, singletonBean) { 
     this.value = value; 
     this.singletonBean = singletonBean; 
    } 
} 

もし私が実行時までどんな値になるのか分からなければ、このようなプロトタイプのBean。現在のパターンは次のとおりです。

public class FactoryImpl implements Factory{ 
    private SingletonBean singletonBean; 

    public FactoryImpl(SingletonBean singletonBean) { 
     this.singletonBean = singletonBean; 
    } 

    public PrototypeBean getPrototypeBean(int value) { 
     return new PrototypeBean(value, singletonBean); 
    } 
} 

FactoryimplはXMLでまとめられています。これはまだ私にとって恐ろしいようで、私がIoCを壊しているように感じます。これを春に行うクリーナーの方法はありますか?

答えて

2

これは私が遭遇した春に欠けている最も望ましい機能の1つです。基本的には、あなたのソリューションは私が考えることができる最良の回避策です(singletonBeanvalueフィールドfinal)。

別のアプローチは、春には一つだけコンストラクタの引数(SingletonBean)、その後valueを渡すとPrototypeBeanを作成できるようになります(参照:Best way to refactor this in Spring?を)。しかし、半初期化されたオブジェクトを作成できるので、これはあまりクリーンではありません。

最良の解決策は、パラメータ化された<lookup-method/> - Springで実装されるのを待つ機能を利用することです:SPR-7431。投票してコメントすることを忘れないでください!

関連する問題