Java,依赖注入singleton?

时间:2016-03-28 18:10:23

标签: java playframework dependency-injection singleton

我有以下代码:

setKeyboardTracking(False)

我用它:

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的单元测试,但这很难,因为DummyModel静态实例是从某个配置文件创建的。

我试图创建具有依赖注入模式的单例,但我真的不知道我是否正确行事。 我创造了什么:

 DummyService.get().someMethod();

我是否必须每次都创建新的DummyService并提供配置?

DummyModel还会单身吗?

我应该使用setter还是ctor注射?

我是否可以将默认值设置为config并创建没有参数的新CTOR:

@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'));
  }
}

1 个答案:

答案 0 :(得分:0)

有一个用于创建DummyModel的工厂类并将其作为构造函数参数注入。这样更容易测试,因为您可以轻松地模拟DummyModel进行单元测试。

public DummyService (DummyModel dummyModel) {
    this.dummyModel = dummyModel;
}

在DummyModelFactory类中包含以下行,以便更清晰和明确。

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