Play Framework 2.4 支持 Google Guice 依赖注入(inject)

使用的好处是什么

@Singleton class A

代替
object A

对于单例?

最佳答案

如果 A 没有依赖关系,我可以看到使用 @Singleton class 优于 object 的三个优势:

  • 如果您想测试 A ,并将其声明为 @Singleton class ,您可以选择将其子类化以模拟测试中的某些函数,而这对于 object 是不可能的。
  • 如果使用 objectA 的客户端很容易直接引用它,导致系统强耦合,但使用 @Singleton class 迫使他们考虑 A 在哪里实例化,可能导致更解耦的设计。
  • 如果您后来改变主意,并允许 A 的多个实例,那么如果您选择使用 @Singleton class ,重构将更容易进行。

  • 但是,如果 A 具有依赖项,则使用 @Singleton class 允许它们在构造时被依赖注入(inject),而对于对象,这只有在您将依赖项声明为可变的(例如:带有 getter/setter 方法的 var )时才有可能。

    关于scala - Play 框架依赖注入(inject)对象 vs @Singleton 类,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33843706/

    10-13 06:52