Play Framework依赖注入Object vs @Singleton Class

Mur*_*fin 4 scala guice playframework

Play Framework 2.4支持Google Guice依赖注入

使用的优点是什么

@Singleton class A
Run Code Online (Sandbox Code Playgroud)

代替

object A
Run Code Online (Sandbox Code Playgroud)

对于单身人士?

jaz*_*mit 6

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

  1. 如果你想测试A,并声明它,因为@Singleton class你可以选择子类化它来模拟你的测试中的一些函数,而这是不可能的object.

  2. 如果您使用object,那么客户A直接引用它会非常诱人,导致强耦合系统,但是使用@Singleton class它们来考虑A实例化的位置,可能会导致更加分离的设计.

  3. 如果您以后改变主意并允许多个实例A,那么如果您选择使用重构将更容易@Singleton class.

A但是,如果有依赖关系,则@Singleton class允许它们在构造上进行依赖注入,而对于对象,只有在将依赖关系声明为可变的情况下才能实现(例如:var使用getter/setter方法).