【问题标题】:is @Singleton on a class the same as an object in Scala?类上的@Singleton 是否与Scala 中的对象相同?
【发布时间】:2017-03-17 01:36:07
【问题描述】:

我在 Scala 中发现了一段代码,如下所示:

@Singleton
class MyClass {
    // ...
}

但我认为对象是单例,而类不是。那么这基本上相当于这个吗?

object MyClass {
    // ....
}

编辑:这里是what I'm looking at

【问题讨论】:

标签: scala class singleton


【解决方案1】:

@Singleton 通常指的是 IOC(控制反转)框架中的托管单例,例如 Guice(参见 Scopes)或 Spring。

这与 object 不同,后者是由 ClassLoader 管理的单例。

理论上,您可以同时运行多个应用程序,使用同一类的不同@Singleton 对象。但只要共享一个 ClassLoader,它们都会使用相同的 object

【讨论】:

    【解决方案2】:

    没有。 @Singleton 注释本身完全没有任何作用。它旨在供依赖注入 (DI) 框架使用。 @Singleton 向 DI 框架发出信号,如果另一个(或许多)类将其作为依赖项调用,它应该只实例化该类的一个实例。

    不过,没有什么能阻止您手动实例化更多 class MyClass 实例。

    使用object MyClass,您可以创建一个由 Scala 编译器创建并强制执行的单例。

    【讨论】:

    • 这是否意味着object 上的@Singleton 是多余的?或者更具体地说,object 暗含@Singleton,但@Singleton 不暗含object
    • @user3685285 有点像。它只是不会做任何事情。 object 上的 @Singleton 会被 DI 框架忽略,因为 DI 框架只关心构造类。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-14
    • 2012-05-10
    • 2015-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多