2016-03-28 10 views
0

Java、依存性注入シングルトン?私は次のコードしている

public class DummyService { 

    // Create new DummyModel with default value, 
    // Set value read from config file 
    private static final DummyModel INSTANCE = new DummyModel(Play.application().configuration().getString('some-value')); 

    public static DummyModel get() { 
    return INSTANCE; 
    } 
} 

そして、私はそれを使用する:今すぐ

DummyService.get().someMethod(); 

私はこのDummyServiceを使用するユニットテストを書くことをしようとしているが、DummyModel静的インスタンスが作成されるので、これは難しいですいくつかの設定ファイルから。

私は依存性注入パターンでシングルトンを作成しようとしていますが、私が正しくそれをしているかどうかはわかりません。私が作成した何 :

@Singleton 
public class DummyService { 
    private Configuration config; 
    private DummyModel dummy; 

    @Inject 
    public DummyService(Configuration config) { 
    this.configuration = config; 
    this.dummy = new DummyModel(config.getString('some-value')); 
    } 
} 

私は新しいDummyServiceを作成し、各時間をconfigコン提供する必要がありますか?

DummyModelはまだシングルトンですか?

セッターやctor注入を使用する必要がありますか?

私は引数を持たない新しいCTORをconfigおよび作成するために、デフォルト値を設定することができ、のみ:

 private Configuration config = Play.application().configuration(); 

    @Inject 
     public DummyService() { 
     this.dummy = new DummyModel(config.getString('some-value')); 
     } 

答えて

0

はDummyModelを作成するためのファクトリクラスを持って、コンストラクタの引数としてそれを注入します。このようにして、ユニットテストのためにDummyModelを簡単にモックすることができるので、これは簡単にテストできます。

DummyModelFactoryクラスの中に以下の行を追加してください。

this.dummy = new DummyModel(config.getString('some-value'));