@Singleton是否与Scala中的对象相同?

use*_*285 5 singleton scala class

我在Scala中遇到了一段看起来像这样的代码:

@Singleton
class MyClass {
    // ...
}
Run Code Online (Sandbox Code Playgroud)

但我认为对象是单身人士而且课程不是.这基本上等同于此吗?

object MyClass {
    // ....
}
Run Code Online (Sandbox Code Playgroud)

编辑:这是我正在看的.

Sea*_*oyd 9

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

这是一个区别object,它是由ClassLoader管理的单例.

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


Mic*_*jac 7

号其本身而言,@Singleton注释也绝对没有什么.它旨在由依赖注入(DI)框架使用.@Singleton向DI框架发出信号,如果另一个类(或许多)将其作为依赖项调用它,它应该只实例化该类的一个实例.

但是,没有什么可以阻止您简单地实例化更多class MyClass手动实例.

使用object MyClass,您可以使用Scala编译器创建并强制执行单例.